项目中要用到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() {@Overridepublic 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() {@Overridepublic void onClick(View v) {                        Toast.makeText(getApplicationContext(), "image",                                  Toast.LENGTH_SHORT).show();                          pop1.dismiss();  }});                ((ImageView)layout.findViewById(R.id.image1))                .setOnClickListener(new View.OnClickListener() {@Overridepublic 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);      }}    

更多相关文章

  1. 【Android】MediaPlayer使用方法简单介绍
  2. Android中EditText的设置01
  3. Android(安卓)Studio中提示:Project SDK is not defined
  4. android listview 删除item 刷新 notifyDataSetChanged()失效问
  5. TextView通过获得dimens.xml中定义的大小来动态设置字体大小
  6. Android开发 Fiddler抓包工具简介
  7. Android沉浸式状态栏/状态栏设置背景图片/自定义渐变式状态栏
  8. 【Android】设置打印机参数
  9. android TextView设置字体颜色

随机推荐

  1. Android视图绘制流程解析(二)
  2. Android任务栈和启动模式
  3. Android NDK HelloJNI
  4. 修改AVD的存放位置
  5. Android 和H5之间的交互-基础篇
  6. Android 无线接口层RIL(Radio Layer Inter
  7. android连接mysql数据库
  8. Android系统移植(三)-按键字符表
  9. Android闪屏页动画不起作用的解决方法
  10. android -------- java.net.UnknownServi