利用Android PopupWindow 实现自定义弹出层

fmms 13年前
     <p>Android系统的AlertDailog ,Menu。。。之类控件,我不确定能否自定义样式。 就是在应用中自定义一套主题。</p>    <p>因为系统Menu菜单极其单一。样式丑陋,而且字体,字号都无法修改。  想到用PopupWindow来实现。PopupWindow 其实是一个  Activity 但是消耗的系统资源没有 Activity那么大。 是一个小型的UI线程 (可以这么理解吧)。<br /> <br /> 主体代码</p>    <pre class="brush:java; toolbar: true; auto-links: false;">//长按弹出菜单 public void showTopWindow(){   if (mPopupWindow==null);{    inintTopWindow();   }      mPopupWindow.showAtLocation(findViewById(R.id.full_main), Gravity.CENTER|Gravity.CENTER, 0, 0);      } // 长按弹出层  public void inintTopWindow(){      LayoutInflater mLayoutInflater = (LayoutInflater) (FullScreenLineActivity.this).getSystemService(LAYOUT_INFLATER_SERVICE);    View topWindow=mLayoutInflater.inflate(R.layout.k_line_top_window_layout, null);     mPopupWindow=new PopupWindow(topWindow,LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);   mPopupWindow.setOutsideTouchable(false);   topWindow.findViewById(R.id.f10info).setOnClickListener(new View.OnClickListener() {        @Override    public void onClick(View v) {     // TODO Auto-generated method stub     。。。    }   }); }</pre>    <p></p> PopupWindow的布局可以自定义 xml    。  弹出的PopupWindow 是在Activity上层的。    <br /> 所以即使弹出了PopupWindow,下层的Activity没有被遮盖的部分依然   有之前的所有 监听。 例如我上图中,的触摸滑动事件。  按钮事件 都依然存在。    <br />    <br /> 为了能够像 AlertDialog那样,弹出后。下面的视图,显示为暗色,不能做任何操作。    <br /> 设置 PopupWindow 布局为布满整个屏幕,   中间是并列的 5个按钮。 外围暗黑色的,其实是一个  半透明的背景。    <br /> 将PopupWindow设置为整个屏幕大小, 外围半透明。效果与AlertDialog相当。    <br />    <br /> 按这种思路 ,可以实现自己定义的按钮。 AlertDialog。  样式更灵活,修改起来也方便。