Android中Popupwindow的用法

由於系統自帶的Menu不好看 而且不能自己改樣式

所以很多應用都用Popupwindow自定義了

最精典的莫過於UC和天天的Menu鳥

網上有模仿UCweb的自定義menu的源碼,下面是三個比較經典的文章:

  1. Android提高十八篇之自定義Menu(TabMenu)
  2. 【源碼發佈】仿UCWEB7.4界面最新Menu菜單 源碼放出~!
  3. 模仿UCweb菜單

這三個都是使用PopupWindow來做的,然後往PopupWindow增加一個子View,子View的佈局就是menu的佈局。

出現和退出的動畫:可以給PopUpWindow或它的子view。這些問題可以看看上面三個例子的源碼。

 

Android popupWindow響應back按鍵並關閉

文來自:

http://blog.csdn.net/simayilong/article/details/6696765

--------------------------------------------

同時參考我的上一篇blog: http://blog.csdn.net/woshicaixianfeng/article/details/7075066


PopupWindow 跟我們的 Activity 不一樣,因爲我們在構造 PW 的時候往往不是繼承來的,而是 new 出來的。所以不能使用重寫 PW 的 onKeyDown() 之類的方法來截獲鍵盤事件。好在 PW 本身的特性讓我們很容易就能做到用返回鍵來退出,當然我們也可以截獲鍵盤事件,

這樣就有兩種方法了。


方法一: 最簡單的方法——

在 new 的時候,使用下面的方法:
popupWindow = new PopupWindow(popupWindow_view, 200, 150, true);

關鍵在於最後一個參數,SDK 給出的提示是 Focusable,顧名思義就是該 PW 的 Focusable 屬性,讓它能夠接受焦點。
當然你可以用另一種構造函數,然後再去手動設置focusable屬性:

popupWindow.setFocusable(true); // 一般都需要讓popupWindow裏面的組件獲得焦點啊,往往用來接收用戶輸入或操作 動作


注意: 必須加入下面這行作用未知的語句才能發揮作用:
popupWindow.setBackgroundDrawable(newBitmapDrawable());// 響應返回鍵必須的語句。

請放心,設置 BackgroundDrawable 並不會改變你在配置文件中設置的背景顏色或圖像。

方法二: 最通用的方法——



首先在 PW 的佈局文件(*.xml)中隨意選取一個不影響任何操作的 View,推薦使用最外層的 Layout。
然後設置該 Layout 的 Focusable 和 FocusableInTouchMode 都爲 true。
接着回到代碼中,獲取該 View 的實例,現在你就可以對該 View 重寫 OnKeyListener() 事件了。
我們可以手動捕獲 KEYCODE_BACK 給對話框 dismiss()。
給出一段示例:


privatePopupWindow pw;
privateView view;
privateLinearLayout layMenu;

LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.popup_main_menu,null, false);
layMenu = (LinearLayout) view.findViewById(R.id.layMenu);
pw =new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,true);

layMenu.setOnKeyListener(newOnKeyListener()
{
    publicboolean onKey(View v, intkeyCode, KeyEvent event)
    {
        if(event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK)
            pw.dismiss();

        returnfalse;
    }
});

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章