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);  
    }

}    

猜你喜欢

转载自elingwange.iteye.com/blog/1613197