講下Android中的PopupWindow。姑且就叫做彈窗吧,其實和AlertDialog一樣,也是一種對話框,兩者也經常混用,但是也各有特點。
下面就看看使用方法。首先初始化一個PopupWindow
[java]
- PopupWindow mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.window, null), LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
實現PopupWindow的構造函數,第一個參數導入布局,後面兩個指定寬和高。
彈窗一般有兩種展示方法,用showAsDropDown()和showAtLocation()兩種方法實現。一般參數有兩種,有偏移和無偏移。
[java]
- bt1.setOnClickListener(new OnClickListener(){
-
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAsDropDown(v);//以這個Button為anchor(可以理解為錨,基准),在下方彈出
-
- }});
-
- bt2.setOnClickListener(new OnClickListener(){
-
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAsDropDown(v,20,-20);//橫軸偏移20,縱軸-20,一個狀態欄的長度
-
- }});
-
- bt3.setOnClickListener(new OnClickListener(){
-
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl),
- Gravity.CENTER, 0, 0);//在屏幕居中,無偏移
-
- }});
-
-
- bt4.setOnClickListener(new OnClickListener(){
-
- @Override
- public void onClick(View v) {
- initPopWindow();
- mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl),
- Gravity.TOP | Gravity.LEFT, 20, 20);//在屏幕頂部|居右,帶偏移
-
- }});
-
- bt5.setOnClickListener(new OnClickListener(){
-
- @Override
- public void onClick(View v) {
- if (mPop != null) {
- mPop.dismiss();
- }
-
- }});
-
- }
其中initPopWindow()方法來初始化一個彈窗
[java]
- private void initPopWindow() {
- if (mPop == null) {
- mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.pop, null),
- LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
- }
- if (mPop.isShowing()) {
- mPop.dismiss();
- }
- }
這裡定義了4個按鈕來呈現展示效果,一個按鈕用來關閉,來看下第三個按鈕點擊效果,就不一一截圖了,大家可以自己試下。
看過我以前這系列博客的朋友就會發現,PopupWindow裡面的布局就是抽屜裡面用的布局,���面的背景就是上篇博客講的可延伸圖像。為什麼用這個呢,我們來看下UC的menu效果