Android PopupWindow彈窗教程

來源:互聯網
上載者:User

轉自:http://www.cyqdata.com/android/article-detail-25069

在Android開發中,時不時的可能要彈出出個視窗,本文為你介紹Android PopupWindow彈窗方面的相關知識,其實Android PopupWindow彈窗,也和AlertDialog對話方塊類似,本文就先介紹Android PopupWindow彈窗的相關內容,下面請看教程:

首先:初始化一個Android PopupWindow

PopupWindow  mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.window, null),    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

實現PopupWindow的建構函式,第一個參數匯入布局,後面兩個指定寬和高。彈窗一般有兩種展示方法,用showAsDropDown()和showAtLocation()兩種方法實現。一般參數有兩種,有位移和無位移。

         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()方法來初始化一個彈窗

 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效果

可能這個是用AlertDialog做的,但是用PopupWindow也非常方便。很多的應用都使用了這樣的menu。這裡我就不去仿照UC來做了,就用上面那個布局,原理是一樣的,換換圖片就行。

要做的很簡單,看代碼

public boolean onKeyDown(int keyCode, KeyEvent event){        //截獲按鍵事件        if(keyCode == KeyEvent.KEYCODE_MENU){                initPopWindow();                mPop.showAtLocation(this.findViewById(R.id.rl),                        Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //在螢幕底部        }else if(keyCode == KeyEvent.KEYCODE_BACK){            if(mPop.isShowing()){                mPop.dismiss();            }else{                System.exit(0);            }        }        return false;            }

看下效果

圖片似乎不是很給力,大家搞點漂亮點的圖片就可以了。

我把這個代碼全部貼出來

1 package com.notice.popWindow;  2   3  import android.app.Activity;  4  import android.os.Bundle;  5  import android.view.Gravity;  6 import android.view.KeyEvent;  7 import android.view.View;  8 import android.view.View.OnClickListener;  9 import android.view.ViewGroup.LayoutParams; 10 import android.widget.Button; 11 import android.widget.GridView; 12 import android.widget.PopupWindow; 13  14 public class PopWindow extends Activity { 15      private GridView gv; 16      private Button bt1; 17      private Button bt2; 18      private Button bt3; 19      private Button bt4; 20      private Button bt5; 21      private int[] icons={R.drawable.browser,R.drawable.gallery, 22                            R.drawable.camera,R.drawable.gmail, 23                            R.drawable.music,R.drawable.market, 24                            R.drawable.phone,R.drawable.messages,R.drawable.maps}; 25      private String[] items={"瀏覽器","圖片","相機","時鐘","音樂","市場","撥號","資訊","地圖"}; 26      private PopupWindow mPop; 27      private View layout; 28      private void initPopWindow() { 29         if (mPop == null) { 30             mPop = new PopupWindow(layout, 31                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 32         } 33         if (mPop.isShowing()) { 34             mPop.dismiss(); 35         } 36     } 37     /** Called when the activity is first created. */ 38     @Override 39     public void onCreate(Bundle savedInstanceState) { 40         super.onCreate(savedInstanceState); 41         setContentView(R.layout.main); 42         bt1 = (Button)findViewById(R.id.bt1); 43         bt2 = (Button)findViewById(R.id.bt2); 44         bt3 = (Button)findViewById(R.id.bt3); 45         bt4 = (Button)findViewById(R.id.bt4); 46         bt5 = (Button)findViewById(R.id.bt5); 47         layout = View.inflate(this, R.layout.window, null); 48         gv = (GridView) layout.findViewById(R.id.gv); 49         MyAdapter adapter=new MyAdapter(this,items,icons); 50         gv.setAdapter(adapter); 51          52         bt1.setOnClickListener(new OnClickListener(){ 53  54             @Override 55             public void onClick(View v) { 56                 initPopWindow(); 57                 mPop.showAsDropDown(v);//以這個Button為anchor(可以理解為錨,基準),在下方彈出 58                  59             }}); 60          61         bt2.setOnClickListener(new OnClickListener(){ 62  63             @Override 64             public void onClick(View v) { 65                 initPopWindow(); 66                 mPop.showAsDropDown(v,20,-20);//橫軸位移20,縱軸-20,一個狀態列的長度 67                  68             }}); 69          70         bt3.setOnClickListener(new OnClickListener(){ 71  72             @Override 73             public void onClick(View v) { 74                 initPopWindow(); 75                 mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl),  76                         Gravity.CENTER, 0, 0);//在螢幕置中,無位移 77                  78             }}); 79          80          81         bt4.setOnClickListener(new OnClickListener(){ 82  83             @Override 84             public void onClick(View v) { 85                 initPopWindow(); 86                 mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl),  87                         Gravity.TOP | Gravity.LEFT, 20, 20);//在螢幕頂部|居右,帶位移 88                  89             }}); 90          91         bt5.setOnClickListener(new OnClickListener(){ 92  93             @Override 94             public void onClick(View v) { 95                 if (mPop != null) { 96                     mPop.dismiss(); 97                 } 98                  99             }});100         101     }102     public boolean onKeyDown(int keyCode, KeyEvent event){103         //截獲按鍵事件104         if(keyCode == KeyEvent.KEYCODE_MENU){105                 initPopWindow();106                 mPop.showAtLocation(this.findViewById(R.id.rl),107                         Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //在螢幕底部108         }else if(keyCode == KeyEvent.KEYCODE_BACK){109             if(mPop.isShowing()){110                 mPop.dismiss();111             }else{112                 System.exit(0);113             }114 115         }116         return false;117         118     }119 }

其中的MyAdapter類可以去看我以前的一篇寫抽屜的部落格,代碼都在裡面。然後就是window.xml

<?xml version="1.0" encoding="utf-8"?> <GridView        xmlns:android="http://schemas.android.com/apk/res/android"      android:id="@+id/gv"       android:background="@drawable/tbg"      android:layout_width="wrap_content"       android:layout_height="wrap_content"       android:numColumns="3"      android:gravity="center"> </GridView> 

只有一個GridView。main.xml就不貼了,就幾個Button。

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.