Android原生Dialog

在原生android里面,有两种dialog写法,一种是直接使用里面提供的AlertDialog.Builder方法去使用,另一种是我们自己根据自己的ui来设计(自定义)。在一般开发中,我们主要使用的是自定义,主要是AlertDialog.Builder提供的dialog不够美观,此外也可能无法满足我们的业务要求,但为了大家理解dialog这一个情况,我们两种都介绍一下。

1.AlertDialog.Builder方法

AlertDialog.Builder方法中创建dialog我们只需要在java(或kotlin中)调用提供的方法,不需要我们自己去布局xml,我以java来介绍:

(1)创建对象

复制代码
AlertDialog.Builder builder = new AlertDialog.Builder(this);

(2)调用对象方法

复制代码
setTitle();设置弹框标题
setMessage();设置弹框信息
复制代码
builder.setTitle("提示");
builder.setMessage("是否要关闭这个程序");

(3)添加点击按钮以及点击事件

在android开发弹框里,我们只有三种按钮可以设置,分别是消极(negative)、中立(neutral)、积极(positive)按钮,一个按钮只能设置一个,多次设置会由最新的覆盖老的。消极按钮一般用于cancel等取消按键,积极按钮则是sure等确认按键,中立一般需要看业务来进行设置和配置。

在这个过程中,我们用的方法只有下面两种,当我们不想传入点击事件的话我们可以使用null,此外补充一点,在点击事件里的finish是退出程序结束程序进程的作用:

复制代码
setPositiveButton();设置积极按钮
setNeutralButton();设置中立按钮
setNegativeButton();设置消极按钮
复制代码
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();
                }
            });
builder.setNegativeButton("取消",null);

(4)展示dialog

复制代码
builder.show();

效果如下:

怎么样,样式是不是很有年代感,所以我们在原生开发中,一般都会使用自定义来满足我们的业务需求和美观需求,接下来我将展示简约的自定义弹框 。

2.自定义方法

(1)设计xml布局

首先我们要设计我们自定义弹框的布局,我下面设计了一个简约的弹框:

activity_newdialog

复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/dialog"
    android:clickable="true"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tips_title"
        android:textSize="15sp"
        android:textStyle="bold"
        android:gravity="center"
        android:textColor="@color/black"
        android:text="弹框"
        android:layout_marginStart="30dp"
        android:layout_marginEnd="30dp"
        android:layout_marginTop="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/tips"
        android:layout_marginTop="12dp"
        android:layout_marginStart="30dp"
        android:layout_marginEnd="30dp"
        android:layout_marginBottom="20dp"
        android:textSize="15sp"
        android:gravity="center"
        android:textColor="#888888"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <View
        android:background="#EEEEEE"
        android:layout_width="match_parent"
        android:layout_height="0.5dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/negative_btn"
            android:layout_marginTop="15dp"
            android:layout_marginStart="20dp"
            android:layout_marginEnd="20dp"
            android:layout_marginBottom="15dp"
            android:gravity="center"
            android:textColor="@color/black"
            android:textStyle="bold"
            android:textSize="15.55sp"
            android:text="cancel"
            android:layout_weight="0.5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <View
            android:background="#EEEEEE"
            android:layout_width="0.5dp"
            android:layout_height="match_parent"/>

        <TextView
            android:id="@+id/positive_btn"
            android:layout_marginTop="15dp"
            android:layout_marginStart="20dp"
            android:layout_marginEnd="20dp"
            android:layout_marginBottom="15dp"
            android:text="sure"
            android:textColor="@color/black"
            android:textSize="15.55sp"
            android:textStyle="bold"
            android:layout_weight="0.5"
            android:gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
</LinearLayout>

(2)创建MyDialogActivity

我们创建我们对应的Activity文件,为什么创建这个呢,创建后我们就可以当对象方法使用,我们可以在本文件中设计点击事件,需注意的是,本文件需要继承Dialog类

复制代码
package com.example.myapplication;

import android.app.Dialog;
import android.content.Context;
import android.view.View;

import androidx.annotation.NonNull;

public class MyDialogActivity extends Dialog {

    public MyDialogActivity(@NonNull Context context, int themeResId) {
        super(context, themeResId);
        setContentView(R.layout.activity_newdialog);
        findViewById(R.id.positive_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                System.exit(0);
            }
        });
        findViewById(R.id.negative_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
    }
}

话外载体一嘴,我们这里是没有finish方法的,那我们替换为System.exit(0);

(3)设置样式

因为我们后面实例化样式的话需要传递两个参数,一个是this,还有一个是我们的样式,所以我们在themes下创建样式

复制代码
    <style name="mydialog" parent="Theme.MaterialComponents.Dialog">
        <!-- 透明背景 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 隐藏标题栏 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 文字颜色 -->
        <item name="android:textColorPrimary">@color/black</item>
        <!-- 按钮样式 -->
        <item name="buttonBarPositiveButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Dialog</item>
        <item name="buttonBarNegativeButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Dialog</item>
    </style>

(4)实例化对象并使用

复制代码
MyDialogActivity md = new MyDialogActivity(this,R.style.mydialog);
md.show();

最终效果展示:

嗯?是不是比原本原生提供的好看?嗯?那我问你,look at my eyes。

下课!

相关推荐
游戏开发爱好者82 小时前
iOS App 电池消耗管理与优化 提升用户体验的完整指南
android·ios·小程序·https·uni-app·iphone·webview
人生游戏牛马NPC1号3 小时前
学习 Flutter (四):玩安卓项目实战 - 中
android·学习·flutter
梁同学与Android5 小时前
Android ---【CPU优化】需要优化的原因及优化的地方
android
Misha韩6 小时前
React Native 基础tabBar和自定义tabBar - bottom-tabs
android·react native
iHero6 小时前
【Nextcloud】在 Ubuntu 22.04.3 LTS 上的 Nextcloud Hub 10 (31.0.2) 后台任务cron 的优化
android·linux·ubuntu·nextcloud
yuanlaile10 小时前
Flutter Android打包学习指南
android·flutter·flutter打包·flutter android
教程分享大师10 小时前
中兴B860AV5.1-M2_S905L3SB最新完美版线刷包 解决指示灯异常问题
android
2501_9159184110 小时前
iOS 性能监控工具全解析 选择合适的调试方案提升 App 性能
android·ios·小程序·https·uni-app·iphone·webview
冉冉同学10 小时前
【HarmonyOS NEXT】解决Repeat复用导致Image加载图片展示的是上一张图片的问题
android·前端·客户端