Android PopupWindow的简单使用
程序员文章站
2022-05-31 10:55:38
...
PopupWindow在官方文档中是这么描述的:
This class represents a popup window that can be used to display an arbitrary view. The popup window is a floating container that appears on top of the current activity.
翻译过来就是:PopupWindow表示可以用来显示任意视图的弹出窗口。弹出窗口是一个浮动的容器,它出现在当前活动的顶部。
简单来说就是一个弹窗。
如:
首先我们先来看看PopupWindow的各个属性方法
PopupWindow的XML的属性
android:overlapAnchor //弹出窗口是否应该重叠它的锚视图。
android:popupAnimationStyle //用于弹出窗口的动画样式
android:popupBackground //用于弹出窗口的背景。
android:popupElevation //窗口高度用于弹出窗口。
android:popupEnterTransition //用来将视图移动到弹出窗口的过渡
android:popupExitTransition //用于将视图移出弹出窗口的过渡
PopupWindow常用的构造方法:
PopupWindow(Context context) //参数为上下文,创建一个高宽为0 的新的没有焦点的PopupWindow
PopupWindow() //创建一个高宽为0的新的没有焦点的PopupWindow
PopupWindow(View contentView) //参数为要显示的View,就是PopupWindow所要显示的视图
PopupWindow(int width, int height) //参数为要显示的View的宽度和高度
PopupWindow(View contentView, int width, int height) //参数为要显示的view,宽度和高度
PopupWindow常见的方法:
dismiss() //关闭弹出窗口
getWidth() //得到PopupWindow宽度
getHeight() //得到PopupWindow高度
setHeight(int height) //设置PopupWindow高度
setWidth(int width) //设置PopupWindow宽度
setBackgroundDrawable(Drawable background) //设置PopupWindow背景
使用showAsDropDown方法显示PopupWindow
showAsDropDown(View anchor) //指定PopupWindow显示在控件的左下方
showAsDropDown(View anchor, int xoff, int yoff) //指定PopupWindow显示在控件的左下方,x和y方向上有偏移
showAtLocation(View parent, int gravity, int x, int y) //指定相对于父控件的位置(Gravity.LEFT | Gravity.TOP.……)
上面介绍了一下常见的属性和方法,如果需要更详细的介绍,可以去官方文档看看。
下面正式介绍下PopupWindow的使用步骤:
- 创建PopupWindow的对象实例
- 完成一些初始化设置,如设置背景、注册事件监听器和添加动画等
- 调用showAsDropDown(View view)将PopupWindow作为View组件的下拉组件显示出来;或调用showAtLocation()方法将PopupWindow在指定位置显示出来。
首先创建popupWindow的视图
popupwindow.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="是"
/>
<TextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="否"/>
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android" >
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="弹出窗口"
/>
</LinearLayout>
main.class
public class MainActivity extends AppCompatActivity {
PopupWindow popupWindow;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.btn);
//创建PopupWindow对象
popupWindow = new PopupWindow(this);
//指定PopupWindow的宽度
popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
//指定PopupWindow的高度
popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
//为PopupWindow设置视图内容
popupWindow.setContentView(LayoutInflater.from(this).inflate(R.layout.popupwindow, null));
// 设置PopupWindow的背景
popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
//设置PopupWindow弹出窗体可点击
popupWindow.setFocusable(true);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//相对于父控件的相对位置:
//popupWindow.showAtLocation(button,Gravity.BOTTOM, 20, 10);
//相对于视图中某个控件的相对位置
popupWindow.showAsDropDown(button, 0, 20);
}
});
}
}
最后效果如图: