欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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表示可以用来显示任意视图的弹出窗口。弹出窗口是一个浮动的容器,它出现在当前活动的顶部。
简单来说就是一个弹窗。
如:

Android 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的使用步骤:

  1. 创建PopupWindow的对象实例
  2. 完成一些初始化设置,如设置背景、注册事件监听器和添加动画等
  3. 调用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);
            }
        });
    }
}

最后效果如图:
Android PopupWindow的简单使用