Android的PopupWindow弹窗用法

1.直接上代码

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    
    


    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        TextView textView = (TextView)findViewById(R.id.tv);
        textView.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                initPopWindow(v);
            }
        });

    }

    private void initPopWindow(View v) {
    
    
        View view = LayoutInflater.from(this).inflate(R.layout.pop_layout, null, false);
        
        //1.构造一个PopupWindow,参数依次是加载的 View,宽高
        //这里设置PopupWindow占满屏幕宽度和占满屏幕高度(也就是全屏显示)
        final PopupWindow popWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true);
        
        //这些为了点击非PopupWindow区域,PopupWindow会消失的,如果没有下面的
        //代码的话,你会发现,当你把PopupWindow显示出来了,无论你按多少次后退键
        //PopupWindow并不会关闭,而且退不出程序,加上下述代码可以解决这个问题
        popWindow.setTouchable(true);
        popWindow.setTouchInterceptor(new View.OnTouchListener() {
    
    
            @Override
            public boolean onTouch(View v, MotionEvent event) {
    
    
                return false;
                // 这里如果返回true的话,touch事件将被拦截
                // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
            }
        });

     //   popWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));    //要为popWindow设置一个背景才有效

        //设置 popupWindow 显示的位置,参数依次是参照 View,x轴的偏移量,y轴的偏移量
        popWindow.showAsDropDown(v, 0, 0);

        LinearLayout l1 = (LinearLayout)view.findViewById(R.id.l1);
        l1.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                popWindow.dismiss();
            }
        });

        LinearLayout l2 = (LinearLayout)view.findViewById(R.id.l2);
        l2.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                //这里可以做操作
                
            }
        });

    }
    
}

2.主布局activity_main代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/te2xtView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="测试文字"
        android:textSize="50sp"
        android:textStyle="bold"
        tools:ignore="MissingConstraints" />

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试文字1"
        android:textSize="50sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="测试文字2"
        android:textSize="50sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="测试文字3"
        android:textSize="50sp"
        android:textStyle="bold" />


</LinearLayout>

3.PopupWindow弹窗的布局pop_layout代码如下

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/l1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black"
    android:gravity="center"
    android:orientation="vertical">


    <FrameLayout
        android:id="@+id/f1"
        android:layout_width="800dp"
        android:layout_height="1200dp">

        <LinearLayout
            android:id="@+id/l2"
            android:layout_width="600dp"
            android:layout_height="900dp"
            android:layout_gravity="center"
            android:background="@color/white"
            android:orientation="horizontal"></LinearLayout>
    </FrameLayout>
</LinearLayout>

xml中用的颜色值在这里:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#80000000</color>
    <color name="white">#FFFFFFFF</color>
</resources>

4.可以看到弹窗是全屏弹窗,背景是透明的。颜色调色看这篇文章

https://blog.csdn.net/qq_36570506/article/details/131551336

猜你喜欢

转载自blog.csdn.net/qq_36570506/article/details/131708723
今日推荐