Android PopupWindow弹窗教程
来源:互联网 发布:淘宝宝贝平均停留时长 编辑:程序博客网 时间:2024/05/21 22:53
在Android开发中,时不时的可能要弹出出个窗口,本文为你介绍Android PopupWindow弹窗方面的相关知识,其实Android PopupWindow弹窗,也和AlertDialog对话框类似,本文就先介绍Android PopupWindow弹窗的相关内容,下面请看教程:
首先:初始化一个Android PopupWindow
1 PopupWindow mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.window, null),2 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
实现PopupWindow的构造函数,第一个参数导入布局,后面两个指定宽和高。弹窗一般有两种展示方法,用showAsDropDown()和showAtLocation()两种方法实现。一般参数有两种,有偏移和无偏移。
1 bt1.setOnClickListener(new OnClickListener(){ 2 3 @Override 4 public void onClick(View v) { 5 initPopWindow(); 6 mPop.showAsDropDown(v);//以这个Button为anchor(可以理解为锚,基准),在下方弹出 7 8 }}); 9 10 bt2.setOnClickListener(new OnClickListener(){11 12 @Override13 public void onClick(View v) {14 initPopWindow();15 mPop.showAsDropDown(v,20,-20);//横轴偏移20,纵轴-20,一个状态栏的长度16 17 }});18 19 bt3.setOnClickListener(new OnClickListener(){20 21 @Override22 public void onClick(View v) {23 initPopWindow();24 mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl), 25 Gravity.CENTER, 0, 0);//在屏幕居中,无偏移26 27 }});28 29 30 bt4.setOnClickListener(new OnClickListener(){31 32 @Override33 public void onClick(View v) {34 initPopWindow();35 mPop.showAtLocation(PopWindow.this.findViewById(R.id.rl), 36 Gravity.TOP | Gravity.LEFT, 20, 20);//在屏幕顶部|居右,带偏移37 38 }});39 40 bt5.setOnClickListener(new OnClickListener(){41 42 @Override43 public void onClick(View v) {44 if (mPop != null) {45 mPop.dismiss();46 }47 48 }});
其中initPopWindow()方法来初始化一个弹窗
1 private void initPopWindow() {2 if (mPop == null) {3 mPop = new PopupWindow(getLayoutInflater().inflate(R.layout.pop, null),4 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);5 }6 if (mPop.isShowing()) {7 mPop.dismiss();8 }9 }
这里定义了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。
- PopupWindow---Android PopupWindow弹窗教程
- Android PopupWindow弹窗教程
- android之弹窗popupWindow
- android自定义弹窗PopupWindow
- Android:PopupWindow简单弹窗
- Android中自定义PopupWindow,动态弹窗。
- Android:PopupWindow简单弹窗改进版
- Android:PopupWindow简单弹窗改进版
- android中PopupWindow的使用教程
- Android实战简易教程-第七十二枪(PopupWindow浮动窗)
- Android高手进阶教程(十)之----Android PopupWindow的使用!!!
- Android高手进阶教程(十)之----Android PopupWindow的使用!
- Android高手进阶教程(十)-----Android PopupWindow的使用!!!
- Android高手进阶教程(十)之----Android PopupWindow的使用!
- Android高手进阶教程(十)之----Android PopupWindow的使用!!!
- Android高手进阶教程(十)之----Android PopupWindow的使用!!!
- Android高手进阶教程(十)之----Android PopupWindow的使用!
- PopupWindow弹窗事件
- MFC treectrl控件类以及添加图标
- UINavigationController的popViewControllerAnimated 问题
- C++中智能指针的设计和使用 .
- All in All
- hdu 1059 多重背包问题 Dividing
- Android PopupWindow弹窗教程
- SecureCRT 使用vim时文字高亮显示
- NoSQL分类
- HDU 4578 Transformation
- .net 防盗链
- 闭包
- 10个调试和排错的小建议
- 暑假小结
- 那些现在用不到以后可能也会用到的文章