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