利用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。 样式更灵活,修改起来也方便。