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);
    }
}
相关推荐
沈韶珺6 分钟前
Elixir语言的安全开发
开发语言·后端·golang
go546315846534 分钟前
python 从知网的期刊导航页面抓取与农业科技相关的数据
开发语言·python·科技
Kevin Coding44 分钟前
Flutter使用Flavor实现切换环境和多渠道打包
android·flutter·ios
辞半夏丶北笙1 小时前
最近最少使用算法(LRU最近最少使用)缓存替换算法
java·算法·缓存
m0_699659561 小时前
QT知识点复习
开发语言·qt
南玖yy1 小时前
C语言:数组的介绍与使用
c语言·开发语言·算法
米码收割机1 小时前
【python】tkinter实现音乐播放器(源码+音频文件)【独一无二】
开发语言·python·pygame
yashunan1 小时前
Web_php_unserialize
android·前端·php
星如雨グッ!(๑•̀ㅂ•́)و✧1 小时前
Java NIO全面详解
java·python·nio
笛柳戏初雪1 小时前
Python中的函数(下)
开发语言·python