Android - popWindow简单使用

本文介绍了如何在Android中使用PopWindow,包括点击控件显示/隐藏窗口、按钮交互及外部点击关闭窗口的实现。提供了`activity_main.xml`、`activity_popwindow.xml`和`MainActivity.java`的代码示例,并讨论了添加动画的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果

点击控件,弹出窗口;再次点击控件,窗口消失;
点击按钮一,吐丝,窗口消失;
点击按钮二、三,吐丝,窗口不消失;
点击外部,窗口消失;

在这里插入图片描述效果

在这里插入图片描述

设置多一个布局 - - 窗口的布局
相关代码解释,在注释里有写

activity_main.xml

 <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:textSize="25dp"
       android:text="popWindow"
       android:padding="10dp"
       android:id="@+id/tv_popWindow"/>

activity_popwindow.xml

   <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="按钮一"
        android:id="@+id/bt_one"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="按钮二"
        android:id="@+id/bt_two"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="按钮三"
        android:id="@+id/bt_three"/>

在这里插入图片描述

MainActivity.java

//控件,点击弹出窗口
 tv = findViewById(R.id.tv_popWindow);
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            	//窗口
                popWindow();
            }
        });
private PopupWindow mPopWindow;
    private void popWindow() {
        //利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 View
        View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);
        mPopWindow = new PopupWindow(contentView);

        /*
        * 设置窗体的长和宽
        * 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)
        * popupWindow的宽和高, 以这里代码设置的为准
        * */
        mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        //充满
//        mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
//        mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);


        //设置动画所对应的style
//        mPopWindow.setAnimationStyle(R.style.contextMenuAnim);


        /*
        * 外部点击, 隐藏窗体的功能(三种方法)
        * */
        //1. 设置再次点击控件的时候,关闭窗口,不重新打开
        mPopWindow.setFocusable(true);
        //2.
//        mPopWindow.setOutsideTouchable(true);
        //3.
//        ColorDrawable dw = new ColorDrawable(0x00000000);
//        mPopWindow.setBackgroundDrawable(dw);


        /*
        * 设置窗体在控件的相对位置
        * */
        // 显示在某个控件的正左下方,无偏移
        mPopWindow.showAsDropDown(tv);
        // 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量
//        mPopWindow.showAsDropDown(tv, 0, 0);
        //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
//        mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);


        Button bt_one = contentView.findViewById(R.id.bt_one);
        bt_one.setOnClickListener(this);
        Button bt_two = contentView.findViewById(R.id.bt_two);
        bt_two.setOnClickListener(this);
        Button bt_three = contentView.findViewById(R.id.bt_three);
        bt_three.setOnClickListener(this);
    }
//点击按钮,吐丝
@Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_one:
                Toast.makeText(this, "你点击了按钮一", Toast.LENGTH_SHORT).show();
                //窗体消失
                mPopWindow.dismiss();
                break;

            case R.id.bt_two:
                Toast.makeText(this, "你点击了按钮二", Toast.LENGTH_SHORT).show();
                break;

            case R.id.bt_three:
                Toast.makeText(this, "你点击了按钮三", Toast.LENGTH_SHORT).show();
                break;
        }
    }

在这里插入图片描述

完整代码(MainActivity.java)

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tv = findViewById(R.id.tv_popWindow);
        tv.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popWindow();
            }
        });
    }

    private PopupWindow mPopWindow;
    private void popWindow() {
        //利用 LayoutInflater获取 R.layout.activity_popwindow 对应的 View
        View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.activity_popwindow, null);
        mPopWindow = new PopupWindow(contentView);

        /*
        * 设置窗体的长和宽
        * 代码强制设置 PopupWindow的 Height、Width(否则无法显示出来)
        * popupWindow的宽和高, 以这里代码设置的为准
        * */
        mPopWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
        mPopWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        //充满
//        mPopWindow.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
//        mPopWindow.setHeight(ViewGroup.LayoutParams.FILL_PARENT);


        //设置动画所对应的style
//        mPopWindow.setAnimationStyle(R.style.contextMenuAnim);


        /*
        * 外部点击, 隐藏窗体的功能(三种方法)
        * */
        //1. 设置再次点击控件的时候,关闭窗口,不重新打开
        mPopWindow.setFocusable(true);
        //2.
//        mPopWindow.setOutsideTouchable(true);
        //3.
//        ColorDrawable dw = new ColorDrawable(0x00000000);
//        mPopWindow.setBackgroundDrawable(dw);


        /*
        * 设置窗体在控件的相对位置
        * */
        // 显示在某个控件的正左下方,无偏移
        mPopWindow.showAsDropDown(tv);
        // 相对某个控件的位置,有偏移,xoff为 X轴的偏移量,yoff为 Y轴的偏移量
//        mPopWindow.showAsDropDown(tv, 0, 0);
        //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
//        mPopWindow.showAtLocation(tv, Gravity.BOTTOM, 10, 30);


        Button bt_one = contentView.findViewById(R.id.bt_one);
        bt_one.setOnClickListener(this);
        Button bt_two = contentView.findViewById(R.id.bt_two);
        bt_two.setOnClickListener(this);
        Button bt_three = contentView.findViewById(R.id.bt_three);
        bt_three.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.bt_one:
                Toast.makeText(this, "你点击了按钮一", Toast.LENGTH_SHORT).show();
                //窗体消失
                mPopWindow.dismiss();
                break;

            case R.id.bt_two:
                Toast.makeText(this, "你点击了按钮二", Toast.LENGTH_SHORT).show();
                break;

            case R.id.bt_three:
                Toast.makeText(this, "你点击了按钮三", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

在这里插入图片描述

添加动画

Android - 简单动画

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值