android java系统弹窗的基础模板

1、资源文件

app\src\main\res\layout下增加custom_pop_layout.xml

定义弹窗的控件资源。

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

	<ImageView
		android:id="@+id/customPopView"
		android:layout_width="match_parent"
		android:layout_height="match_parent"
		android:background="#ff000000" />

    <Button
        android:id="@+id/exampleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:layout_marginStart="40dp"
        android:text="示例按钮"
        app:layout_constraintStart_toStartOf="@id/customPopView"
        app:layout_constraintTop_toTopOf="@id/customPopView" />
</androidx.constraintlayout.widget.ConstraintLayout>

2、java代码

CustomPopUtil初始化有下面几点:

1)获取资源文件的rootView,添加到系统管理器下,达到系统级弹窗效果,可在其他app上弹出。

2)params = new WindowManager.LayoutParams是用来设置弹窗的参数,包括大小、坐标、透明度等。后面可根据需要修改。

3)rootView.setVisibility(View.GONE)表示初始化隐藏。

4)需要弹出时,调用接口show(),如果弹出时,想要修改弹窗的界面参数,可在show接口里调用WindowManager.LayoutParams进一步定制。

java 复制代码
import static android.content.Context.WINDOW_SERVICE;

import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.graphics.PixelFormat;
import android.widget.Button;

public class CustomPopUtil {
    private View rootView;
    private Button exampleButton;
    // 可增加其他ui控件

    @SuppressLint("InflateParams")
    public void init(Context context) {
        rootView = LayoutInflater.from(context).inflate(R.layout.custom_pop_layout, null);

        WindowManager windowManager = (WindowManager) context.getSystemService(WINDOW_SERVICE);

        WindowManager.LayoutParams params = null;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.MATCH_PARENT,
                    WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
                    WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                    PixelFormat.OPAQUE);
        }
        windowManager.addView(rootView, params);

        rootView.setVisibility(View.GONE);

        exampleButton = rootView.findViewById(R.id.exampleButton);
        exampleButton.setOnClickListener(v -> {
            // do some logic
        });
    }

    public void show() {
        rootView.setVisibility(View.VISIBLE);
    }
    public void hide() {
        rootView.setVisibility(View.GONE);
    }
}
相关推荐
雪落漂泊2 分钟前
C++智能指针
开发语言·jvm·c++
木井巳7 分钟前
【记忆化搜索】斐波那契数
java·算法·leetcode·深度优先·剪枝·推荐算法
挂科边缘7 分钟前
Android Studio 保姆级安装教程,Windows 电脑上安装 Android Studio
android·windows·android studio
清水白石00811 分钟前
别被 `Process.start()` 骗了:Python multiprocessing 从面试题到线上生产的进程启动机制实战
开发语言·python
geovindu19 分钟前
java: Task Scheduler
java·开发语言·后端
神奇小梵23 分钟前
java的特殊语法点,与常规语言相异的点
java·开发语言
无巧不成书021838 分钟前
Tomcat 下载后使用全指南:解压、环境配置、启动验证与常见问题排查
java·tomcat
bnmoel38 分钟前
C++ 基础入门篇(二):引用
开发语言·c++·引用·底层
Wang's Blog42 分钟前
Java框架快速入门: Spring Security+OAuth2之多因子认证缓存服务
java·spring·缓存
Danny_姜1 小时前
Android Studio Quail 4 稳定版发布:本地 Gemma 4 + Android Skills
android·ide·android studio