`

android:PopupWindow的使用

 
阅读更多
      项目中要用到PopupWindow。查了一下用法,并做了一个简单的demo,用于备份。

      android中的控件都具有很好的扩展性,这里的PopupWindow中可以放置自定义的view,用法简单而方便。

public class MainActivity extends Activity {

    static final String TAG = "MainActivity";
	
    private List<Map<String, String>> list = new ArrayList<Map<String, String>>();  
    private int state, state1;
    private Button button, button1; 
    private ListView menulist;  
    private View layout;  
    private PopupWindow pop, pop1;
  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
  
        // 初始化数据List
        initPopListData();
        
        button = (Button)findViewById(R.id.button);
        button1 = (Button)findViewById(R.id.button1);
        button.setOnClickListener(listener);
        button1.setOnClickListener(listener);
    }  

    private OnClickListener listener = new View.OnClickListener() {
		@Override
		public void onClick(View v) {

		if ( v.getId() == R.id.button )
		{
            if (state == 1 && pop.isShowing()) 
            {  
                state = 0;  
                pop.dismiss();  
            } 
            else {  
                // 放置自定义的view
                layout = MainActivity.this.getLayoutInflater()
                			.inflate(R.layout.pop, null);  
                menulist = (ListView) layout.findViewById(R.id.menulist); 
                SimpleAdapter listAdapter = new SimpleAdapter(  
                        MainActivity.this, list, R.layout.menu_item,  
                        new String[] { "menuItemName" },  
                        new int[] { R.id.menuitem });  
                menulist.setAdapter(listAdapter);  

                /** 
                 * layout                           	PopupWindow所显示的界面    
                 * myButton.getWidth()              	设置PopupWindow宽度 
                 * myButton.getHeight() * 3 + 5     	设置PopupWindow宽度高度 
                 */  
                pop = new PopupWindow(  
                        layout,  
                        button.getWidth(),  
                        button.getHeight() * 3 + 5);  

                // 设置背景
                ColorDrawable cd = new ColorDrawable(-0000);  
                pop.setBackgroundDrawable(cd);  

                pop.update();  
                pop.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);  
                pop.setTouchable(true); // 设置popupwindow可点击  
                pop.setOutsideTouchable(true);  // 设置popupwindow外部可点击  
                pop.setFocusable(true); //获取焦点  
                /*设置popupwindow的位置*/  
                pop.showAtLocation(layout,  
                        (Gravity.BOTTOM - button.getHeight())  
                                | Gravity.LEFT, 0, 2 * button.getHeight());  
                state = 1;  
                pop.setTouchInterceptor(new View.OnTouchListener() {  
                    @Override  
                    public boolean onTouch(View v, MotionEvent event) {  
                    	/*
                    	 *  如果点击了popupwindow的外部,popupwindow也会消失.
                    	 *  这是PopupWindow的重要特性
                    	 */
                        if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {  
                            pop.dismiss();  
                            return true;   
                        }  
                        return false;  
                    }  
                });  
                // 点击listview中item的处理  
                menulist.setOnItemClickListener(new OnItemClickListener() {  

                    @Override  
                    public void onItemClick(AdapterView<?> arg0, View arg1,  
                            int arg2, long arg3) {  
                        switch (arg2) {  
                        case 0:  
                            Toast.makeText(getApplicationContext(), "系统设置",  
                                    Toast.LENGTH_SHORT).show();  
                            pop.dismiss();  
                            break;  
                        case 1:  
                            Toast.makeText(getApplicationContext(), "自动更新",  
                                    Toast.LENGTH_SHORT).show();  
                            pop.dismiss();  
                            break;  
                        case 2:  
                            Toast.makeText(getApplicationContext(), "关于",  
                                    Toast.LENGTH_SHORT).show();  
                            pop.dismiss();  
                            break;  
                        case 3:  
                            Toast.makeText(getApplicationContext(), "搜索",  
                                    Toast.LENGTH_SHORT).show();  
                            pop.dismiss();  
                            break;  
                        case 4:  
                            Toast.makeText(getApplicationContext(), "退出",  
                                    Toast.LENGTH_SHORT).show();  
                            pop.dismiss();  
                            break;  
                        }  
                    }  
                });  
            }  
		}
        else if ( v.getId() == R.id.button1)
        {
            if (state1 == 1 && pop1.isShowing()) 
            {  
                state1 = 0;  
                pop1.dismiss();  
            } 
            else {  
                layout = getLayoutInflater().inflate(R.layout.pop1,  
                        null);  
                ((ImageView)layout.findViewById(R.id.image))
                	.setOnClickListener(new View.OnClickListener() {
					@Override
					public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "image",  
                                Toast.LENGTH_SHORT).show();  
                        pop1.dismiss();  
					}
				});
                ((ImageView)layout.findViewById(R.id.image1))
                	.setOnClickListener(new View.OnClickListener() {
					@Override
					public void onClick(View v) {
                        Toast.makeText(getApplicationContext(), "image1",  
                                Toast.LENGTH_SHORT).show();  
                        pop1.dismiss();  
					}
				});
                pop1 = new PopupWindow(layout, 150, 80);  

                ColorDrawable cd = new ColorDrawable(Color.RED);  
                pop1.setBackgroundDrawable(cd);  
                pop1.update();  
                pop1.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);  
                pop1.setTouchable(true); 
                pop1.setOutsideTouchable(true);
                pop1.setFocusable(true);
                pop1.showAtLocation(layout,  
                        (Gravity.BOTTOM - button.getHeight())  
                                | Gravity.LEFT, 0, 2 * button.getHeight());  
                state1 = 1;  
                pop1.setTouchInterceptor(new View.OnTouchListener() {  
                    @Override  
                    public boolean onTouch(View v, MotionEvent event) 
                    {  
                        if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {  
                            pop1.dismiss();  
                            return true;   
                        }  
                        return false;  
                    }  
                });  
            }
        }
		
		}
	};
    
    private void initPopListData()
    { 
        HashMap<String, String> map = new HashMap<String, String>();  
        map.put("menuItemName", "系统设置");  
        list.add(map);  
        
        map = new HashMap<String, String>();  
        map.put("menuItemName", "自助更新");  
        list.add(map);  
        
        map = new HashMap<String, String>();  
        map.put("menuItemName", "关于");  
        list.add(map);  
        
        map = new HashMap<String, String>();  
        map.put("menuItemName", "搜索");  
        list.add(map);  
        
        map = new HashMap<String, String>();  
        map.put("menuItemName", "退出");  
        list.add(map);  
    }

}    
分享到:
评论

相关推荐

    Android: PopupWindow 上显示 ListView 并相应 Demo

    在Android开发中,有时我们需要创建一个浮动窗口来展示一些临时信息或者交互,...通过这个Demo,开发者可以学习到PopupWindow的使用以及如何在其中集成复杂的视图组件,例如ListView,为用户带来更丰富的交互体验。

    android的popupWindow使用

    本篇文章将详细介绍如何在Android应用中使用PopupWindow,并通过一个具体的案例来演示其基本用法。 首先,PopupWindow是Android SDK提供的一种轻量级的弹窗组件,相比Dialog,它的创建和显示更加灵活。PopupWindow...

    android 之popupWindow的使用

    本文将详细介绍如何在Android应用中使用PopupWindow,包括其基本概念、创建步骤以及常用方法。 首先,PopupWindow是一个可以浮动在Activity之上的窗口,它不依赖于任何布局,可以自由地显示在屏幕的任何位置。通过...

    android自定义通用PopupWindow

    在Android开发中,`PopupWindow` 是一个非常实用的组件,它允许我们创建弹出式窗口,用于显示一些临时信息或者交互操作。本教程将详细讲解如何封装一个通用的`PopupWindow`,以便在项目中复用,降低代码冗余,提高...

    android popupwindow 底部灰色背景

    通过阅读和学习这个Demo,开发者可以更深入地理解如何在Android应用中创建并使用带有底部灰色背景的PopupWindow。此外,还可以根据项目需求调整PopupWindow的动画效果、透明度等属性,以提供更丰富的用户体验。 总...

    Android popupwindow 实例及使用

    在Android开发中,PopupWindow是一个非常实用的组件,它能够以弹出窗口的形式展示内容,类似于浮动对话框或者下拉菜单。...理解并熟练掌握PopupWindow的使用,对于提升Android应用的用户体验有着重要作用。

    popupwindow实现按钮下方阴影

    在Android开发中,PopupWindow是一种常用的轻量级弹窗组件,用于在屏幕任意位置显示一个浮层视图。本文将详细讲解如何实现标题所描述的功能:“popupwindow弹窗实现点击按钮,下方弹出popwindow,并且只是按钮下方有...

    android PopupWindow的使用(带动画效果)源码

    本教程将详细讲解如何在Android中使用`PopupWindow`并添加动画效果。 首先,`PopupWindow`的创建需要三个基本参数:一个视图(通常是我们要显示的内容)、宽度和高度。以下是一个简单的创建示例: ```java View ...

    Android PopupWindow使用

    本文将详细介绍如何在Android项目中使用PopupWindow。 首先,了解PopupWindow的基本概念。PopupWindow是Android SDK提供的一个类,它可以创建浮动窗口,并且可以在屏幕上的任意位置显示。它不是Activity的一部分,...

    Android PopupWindow使用示例

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建弹出式窗口,类似于下拉菜单、提示框或者浮动视图。这个组件在许多场景下都非常有用,例如在主界面之上显示附加信息或者提供附加操作。下面将...

    Android 多级PopupWindow的小demo.zip

    3. **显示PopupWindow**:使用`showAtLocation()`或`showAsDropDown()`方法定位并显示PopupWindow。`showAtLocation()`需要传入一个View作为参照物,以及Gravity参数来确定PopupWindow的位置;`showAsDropDown()`则...

    Android下拉框PopupWindow使用详解

    Android下拉框PopupWindow使用详解 Android下拉框PopupWindow是一种常用的UI组件,用于在移动应用程序中实现下拉框的功能。下面将详细介绍Android下拉框PopupWindow的使用方法和实现原理。 一、PopupWindow的基本...

    android使用popupwindow自定义menu菜单

    在Android开发中,`PopupWindow`是一个非常实用的组件,它可以用来创建弹出式窗口,为用户提供临时的交互界面,比如模拟系统级的下拉菜单、快捷操作菜单等。本篇将详细介绍如何在Android中利用`PopupWindow`来实现...

    Android自定义下拉框(PopupWindow实现)

    本篇将详细讲解如何使用PopupWindow实现一个定制化的下拉框。 首先,理解PopupWindow的基本概念。PopupWindow是Android提供的一种轻量级窗口,可以用来弹出一个浮动视图。它通常用于创建快捷菜单、下拉列表或者其他...

    Android中PopupWindow使用方法详解

    以上就是Android中PopupWindow的使用方法和相关知识点,理解并熟练运用这些技巧,可以帮助开发者更好地创建动态、丰富的用户界面。在实际开发中,可以根据项目需求灵活调整PopupWindow的行为,提高用户体验。同时,...

    Android从屏幕底部弹出PopupWindow

    在这种情况下,我们可以使用TranslateAnimation,将PopupWindow从底部向上移动到目标位置。创建动画的代码可能如下: ```java TranslateAnimation animation = new TranslateAnimation( Animation.RELATIVE_TO_...

    Android自定义popupwindow实例代码

    在Android开发中,`PopupWindow` 是一个非常实用的组件,用于创建弹出式窗口,它可以显示在屏幕任意位置,并且可以自定义其内容和样式。本文将详细介绍如何在Android中自定义`PopupWindow`,并实现弹出菜单的效果。 ...

    Android PopupWindow与Activity之间的数据传递.zip

    在Android开发中,PopupWindow和Activity是两个非常重要的组件。PopupWindow通常用于创建浮动窗口,如下拉菜单、提示框等,而Activity则是应用程序的基本单元,承载着用户界面和业务逻辑。两者之间的数据传递是实现...

    android自定义PopupWindow

    2. **实例化PopupWindow**:使用 `PopupWindow` 类的构造函数,传入刚刚创建的View,以及窗口的宽度和高度。例如: ```java View popupView = LayoutInflater.from(context).inflate(R.layout.popup_window, null)...

Global site tag (gtag.js) - Google Analytics