`
kongweile
  • 浏览: 508489 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

popupWindow的用法

 
阅读更多

首先show一下執行結果給大家看,
這一張圖是按下Press to Popup

接著我按下 Press to Popup 之後,彈出了PopupWindow,在PopupWindow中的元件都是View 的元件,並且都可操作

PopupWindow中的元件皆是可操作的,並且當我在 Popup Window 以外的地方作GUI操作時,也都是可以操作的,
如下所示,命名為 Outside 的 Button 是 PopupWindow之外的元件,然而當視窗彈出後,
我們仍然可觸碰到這個元件。
(當然我們也可以透過PopupWindow的函數作設定,讓PopupWindow起來時,使用者無法觸碰到 Outside Button)

因為我想要作是是一個真實感的 PopupWinodw,所以當觸碰範圍操出PopupWindow之外,
便呼叫dismiss() 關掉此PopupWindow,所以會出現如下畫面。

由上圖畫面可看出來,PopupWindow 已經被關掉了。

接下來,本文篇文章解釋一下 PopupWindow class 的用法
「如何在 Android 上運用 PopupWindow class」

本文章是分享給一些有 Android App 初階開發者功力的朋友們。

PopupWindow 這個 class, 從 Eclair 上,目前只發現有 Calendar 的 Application 跟 AutoCompleteTextView 有使用到。
目前發現到 Android 其它彈出視窗的實作,除了用Activity的實作偽裝成 假性Dialog 的方法之外,就是這個 PopupWindow。

所謂的 假性 Dialog 方法,可以參閱 像是 QuickContactActivity.java 的實作,
或者像是 SearchDialog.java 的實作。
(SearchDilaog 的實作可參考 http://wp.me/pMRh0-R )

不過想想 AutoCompleteTextView 的 DropDown Menu 的話,其實還是 PopupWindow
的使用比較 make sense。至少它的特性看起來還不賴。
因此就花了一點時間把 這兩邊的 code 靜態trace一下,
把一些有用的元素抽離出來,所以就形成了這篇文章。
建議有空的話,還是要 trace 一下 PopupWindow 的 source code

如同一般的假性Dialog 的作法,運用dismiss().
透過 Calendar 程式中的 CalendarView.java 的程式
我們發現,只要作如下這件事

mPopup.getContentView().setOnClickListener(new OnClickListener(){
  public void onClick(View v) {
    mPopup.dismiss();
  }
} );

那麼當你的滑鼠觸及其它地方的時候,就可以呼叫 dimiss(),把mPopup關掉了。
因為假設讀者有自己的方法,可以動一下手腳把 dismiss 作的好。

然後比較值得一提的在這邊
要如何作,才能當使用按超出 PopupWindow 的範圍時,
事件能夠放PopupWindow外的 View 所接收,並且PopupWindow會被關上
(就如同 AutoCompleteTextView 的效果一樣)

主要是設 setFocusable為 false
也設 setOutsideTouchable 為 true

LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mPopup = new PopupWindow(inflater.inflate(R.layout.popup_window_layout, null, false), 300, 300,  false);
mPopup.setOutsideTouchable(true);

然後PopupWindow 外的元件如果接到 Event的話,
就設 mPopup.dismiss()把PopupWindow關掉

另外 PopupWindow 的 showAsDropDown() 用起來,
似乎是比 showAtLocation 好用多了。
所以如果你是想要作一個可彈出的 ContextMenu,特別建議可以用showAsDropDown()

 

转载:http://milochen.wordpress.com/2010/06/16/android_popupwindow_class/

分享到:
评论

相关推荐

    Android入门之PopupWindow用法实例解析

    主要介绍了Android入门之PopupWindow用法,对于Android初学者来说有一定的学习借鉴价值,需要的朋友可以参考下

    Android中PopupWindow使用方法详解

    主要为大家详细介绍了Android中PopupWindow使用方法,感兴趣的小伙伴们可以参考一下

    PopupWindow用法实例

    PopupWindow详细用法实例源代码

    PopupWindow的基本使用

    该项目演示了,PopupWindow的基本使用,相关PopupWindow代码有独立的Class文件,并且有大量的注释说明。实现的功能有弹出的PopupWindow上有EditText能与软键盘并存不冲突,弹出PopupWindow的时候背景自动改变灰度为...

    Android PopupWindow用法解析

    主要为大家详细解析了Android PopupWindow用法,对PopupWindow源码进行分析,感兴趣的小伙伴们可以参考一下

    Android PopupWindow使用方法小结

    前几天要用到PopupWindow,一时竟想不起来怎么用,赶紧上网查了查,自己写了个demo,并在此记录一下PopupWindow的用法。 使用场景 PopupWindow,顾名思义,就是弹窗,在很多场景下都可以见到它。例如ActionBar/...

    android popupwindow用法详解

    本文实例为大家分享了android popupwindow的用法,供大家参考,具体内容如下 一、基本用法 一般做法,新建类继承popupwindow。例 /** * popupwindow基本用法 * Created by Administrator on 2015/11/25. */ ...

    Android组件popupwindow使用方法详解

    主要为大家详细介绍了Android组件popupwindow使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Android开发中PopupWindow用法实例分析

    主要介绍了Android开发中PopupWindow用法,结合实例形式分析了PopupWindow弹出窗口效果的使用技巧,需要的朋友可以参考下

    popupWindow使用

    popupWindow使用的方法,以及PopupWindow样式的使用

    PopupWindow的用法

    PopupWindow的使用,在一个Activity中显示PopupWindow,并使用一个Button来隐藏PopupWindow

    PopupWindow使用方法详解

    主要为大家详细介绍了PopupWindow的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    popupwindow的Demo

    popupwindow的基本用法

Global site tag (gtag.js) - Google Analytics