利用Android PopupWindow 實現自定義彈出層
Android系統的AlertDailog ,Menu。。。之類控件,我不確定能否自定義樣式。 就是在應用中自定義一套主題。
因為系統Menu菜單極其單一。樣式丑陋,而且字體,字號都無法修改。 想到用PopupWindow來實現。PopupWindow 其實是一個 Activity 但是消耗的系統資源沒有 Activity那么大。 是一個小型的UI線程 (可以這么理解吧)。
主體代碼
//長按彈出菜單
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>
PopupWindow的布局可以自定義 xml 。 彈出的PopupWindow 是在Activity上層的。
所以即使彈出了PopupWindow,下層的Activity沒有被遮蓋的部分依然 有之前的所有 監聽。 例如我上圖中,的觸摸滑動事件。 按鈕事件 都依然存在。
為了能夠像 AlertDialog那樣,彈出后。下面的視圖,顯示為暗色,不能做任何操作。
設置 PopupWindow 布局為布滿整個屏幕, 中間是并列的 5個按鈕。 外圍暗黑色的,其實是一個 半透明的背景。
將PopupWindow設置為整個屏幕大小, 外圍半透明。效果與AlertDialog相當。
按這種思路 ,可以實現自己定義的按鈕。 AlertDialog。 樣式更靈活,修改起來也方便。