android PopupWindow 简单应用
来源:互联网 发布:yoo桌面软件 编辑:程序博客网 时间:2024/05/22 09:42
由于项目需要,写了这篇博客,写的不好,敬请见谅。
在android开发中我们经常会用到一些弹出框的应用。
例如我们想要完成一个类似于下面这幅图的效果
废话不多说,先上代码。
package com.example.popupwindowdemo;import android.support.v7.app.ActionBarActivity;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.WindowManager;import android.view.View.OnClickListener;import android.view.WindowManager.LayoutParams;import android.widget.Button;import android.widget.PopupWindow;import android.widget.PopupWindow.OnDismissListener;import android.widget.TextView;public class MainActivity extends ActionBarActivity { private Button button;//响应按钮button private PopupWindow popupWindow;//弹出框实例 private View view;//弹出显示的view private TextView cancel;//弹出框的取消按钮 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); button = (Button)findViewById(R.id.button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { backgroundAlpha(0.3f); initDeletePopupWindow(v); } }); } private void initDeletePopupWindow(View v) { view = this.getLayoutInflater().inflate(R.layout.document_transfer_delete_pop, null); popupWindow = new PopupWindow(view,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //popupWindow.setBackgroundDrawable(new BitmapDrawable()); //popupWindow.setFocusable(true); //使得pop能够获得焦点 //popupWindow.setTouchable(true); //使得pop内的内容可以响应 popupWindow.showAtLocation(v, Gravity.CENTER, 0, 0); } private void backgroundAlpha(float bgAlpha) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = bgAlpha; getWindow().setAttributes(lp); }}
这里其实还有两个xml文件,一个是主activity的xml,一个弹出框布局的xml,这里相信大家看图就能理解这两个xml文件的内容,这里就不贴代码了。
通过上面的代码,我们主要实现了,点击hello world按钮,弹出了一个弹出框,并且我们的背景变暗。其他部分代码都比较简单,都是平常大家经常做的按钮响应之类的,这里就不赘述了。这里主要对initDeletePopupWindow()进行分析,顾名思义,它是来显示弹出框的。其实仔细一看,这个函数总共就三句话(扣除掉我注释的)。这三句话总结一下就是
1.
view = this.getLayoutInflater().inflate(R.layout.document_transfer_delete_pop, null);
加载一个popupwindow的布局,popupwindow本身就是一个布局,或者通俗点说就是一个xml文件,因此使用前必须通过第一句话来加载(和listView中的item是一个道理的,所以在getView函数里我们总能看见这句话)
2.定义一个popupwindow的对象(包括这个弹出框显示些啥,弹出框的尺寸大小等等),看这个构造函数
popupWindow = new PopupWindow(view,LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
第一个参数表示这个popupwindow需要加载的一个view布局,第二,三参数表示这个popupwindow的宽度和高度(这里用的是LayoutParams.WRAP_CONTENT,其实这里可以自由设定,单位为int型)
3.
popupWindow.showAtLocation(v, Gravity.CENTER, 0, 0);
第三句式负责显示popupwindow的,显示弹出框有两个主要函数。showAtLocation()和 showAsDropDown(),第一个函数显示是相对于父布局的,第二个函数显示是相对与某一个view。这里由于我将弹出框显示在整个activity的中间,因此选择使用第一个函数。具体使用方法请参考其他文章。
靠上面这三句话就实现了如图的功能,但是显示一个弹出框并非我们最终目的。比如,我们还想着能点击弹出框外部,能让弹出框消失,或者是,我们想要弹出框里的“删除”和”取消“按钮也能够得到监听和响应。还记得,我在initDeletePopupWindow()注释掉的几句话吗。这里为大家逐一解释
popupWindow.setBackgroundDrawable(new BitmapDrawable());popupWindow.setFocusable(true); //使得pop能够获得焦点
这两句话需要一起使用,作用是,点击阴影部分弹出框会消失
popupWindow.setTouchable(true);
这句话是针对弹出框中的内容,若内容需要监听响应之类的,就必须加上这句话。
细心的读者发现代码中还有一个函数
private void backgroundAlpha(float bgAlpha) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = bgAlpha; getWindow().setAttributes(lp); }
这个函数主要是设置阴影的,传入的float的代表设置的昏暗程度
比如 backgroundAlpha(1f)就是正常亮度
backgroundAlpha(0f)就是变得全黑
根据源码 参数范围为 0-1
代码中backgroundAlpha(0.3f)就达到了如图所示的黑暗效果
文章内容就这些,有些地方自身也不是很深入理解,只是能够使用,可能讲的有不对的地方,望路过的大神给予指点。
- android PopupWindow 简单应用
- Android中popupWindow的简单应用
- Android popupwindow 简单实例
- Android PopupWindow简单使用
- 简单 android popupwindow 实现
- Android PopupWindow简单使用
- Android PopupWindow简单解析
- Android PopupWindow简单使用
- Android PopUpWindow简单使用
- 【Android】PopupWindow的简单运用
- android PopupWindow 的简单使用
- Android PopupWindow的简单使用
- android PopupWindow的简单实用
- Android PopupWindow的简单显示
- Android PopupWindow 简单之用法
- Android:PopupWindow简单弹窗
- Android popupwindow的简单使用
- Android UI PopupWindow 简单使用
- Linux下安装Erlang编程环境
- 数据结构——数组与广义表篇——猴子选大王(数组版)——v2.0
- 日志库EasyLogging++学习系列(4)—— 格式说明符
- 移植Linux3.0内核到fl2440开发板
- StringBuffer和String区别
- android PopupWindow 简单应用
- 第三周-项目4
- 学习如何读文献,
- Hibernate 、多表关联映射-组件关联映射(component)
- 测试笔试题
- 【bzoj2962】【序列操作】【线段树】
- 【小李木耳】第四年对话:蒋涛,今年的新木耳种完了,免费供应给你家里人品尝,需要就找我!
- SHINE OPENCART 自适应 多用途主题模板 ABC-0021
- Ubuntu下配置HHVM最新教程