Android 实现Dialog自定义弹窗功能

Android自定义弹窗

在Android应用开发过程中,弹窗是一个常用的UI组件,可以用来显示一些提示、警告或者用户交互的内容。Android提供了一些默认的弹窗,比如AlertDialog,但是有时候我们需要自定义弹窗来满足特定的需求。本文将介绍如何在Android中自定义弹窗,并提供一个简单的代码示例。

下面我们将实现简单的自定义弹窗。

先来一张效果图

71398a7eb8204257b6b54a83a4d18185.jpg

实现步骤:

1.创建自定义弹窗布局

首先,创建一个 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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="650dp"
    android:layout_height="400dp"

    android:background="#2A2828">

    <TextView
        android:id="@+id/tvMessage"
        android:layout_width="452dp"
        android:layout_height="44dp"
        android:layout_marginStart="48dp"
        android:text="该应用软键需要开启权限,"
        android:textColor="#FFFFFF"
        android:textSize="25sp"
        app:layout_constraintBottom_toTopOf="@+id/tvMessage2"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/tvMessage2"
        android:layout_width="559dp"
        android:layout_height="86dp"
        android:layout_marginStart="48dp"
        android:layout_marginBottom="76dp"
        android:text="请转至个人中心 > 隐私管理 > 个人信息设置打开"
        android:textColor="#FFFFFF"
        android:textSize="25sp"
        app:layout_constraintBottom_toTopOf="@+id/btnCancel"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/btnCancel"
        android:layout_width="185dp"
        android:layout_height="75dp"
        android:layout_marginStart="16dp"
        android:layout_marginBottom="16dp"
        android:backgroundTint="#4D4D4D"
        android:text="取消"
        android:textColor="#FFFFFF"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="185dp"
        android:layout_height="75dp"
        android:layout_marginStart="9dp"
        android:layout_marginBottom="16dp"
        android:backgroundTint="#4D4D4D"
        android:text="登录"
        android:textColor="#FFFFFF"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btnCancel" />

    <Button
        android:id="@+id/btnSettings"
        android:layout_width="185dp"
        android:layout_height="75dp"
        android:layout_marginStart="9dp"
        android:layout_marginBottom="16dp"
        android:backgroundTint="#3399FF"
        android:text="去设置"
        android:textColor="#FFFFFF"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toEndOf="@+id/btnLogin" />

</androidx.constraintlayout.widget.ConstraintLayout>

绘制点击弹窗界面

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="437dp"
        android:layout_height="126dp"
        android:layout_marginStart="292dp"
        android:layout_marginTop="220dp"
        android:backgroundTint="#FF0000"
        android:text="点击此按钮显示弹窗"
        android:textSize="40dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

2.在 Activity 中创建并显示弹窗

接下来,在你的 Activity 或 Fragment 中创建并显示这个自定义弹窗。

package com.example.popup;

import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);

        button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showCameraOptionsDialog();
            }
        });

    }

    //开启权限弹窗
    private void showCameraOptionsDialog() {
        final Dialog dialog = new Dialog(this);
        dialog.setContentView(R.layout.dialog_options);
        // 设置弹窗的宽度和高度
        dialog.getWindow().setLayout(650, WindowManager.LayoutParams.WRAP_CONTENT);  // 600px 宽度,可以根据需要调整
        TextView tvMessage = dialog.findViewById(R.id.tvMessage);
        Button btnCancel = dialog.findViewById(R.id.btnCancel);
        Button btnLogin = dialog.findViewById(R.id.btnLogin);
        Button btnSetting = dialog.findViewById(R.id.btnSettings);

        btnCancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
                // 退出应用并返回到主屏幕
                finishAffinity();
            }
        });

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 跳转到登录页面
            }
        });

        btnSetting.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
                // 跳转到个人信息设置页面
            }
        });
        dialog.show();
    }
}

3. 处理不同的按钮点击操作

取消按钮:使用 finishAffinity() 退出应用并返回主屏幕。

登录按钮:跳转到账户登录页面。

去设置按钮:跳转到个人信息设置页面。

通过这种方式,你可以在不同的状态下显示不同的弹窗内容和操作选项,满足的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值