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() {@Overridepublic 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"><TextViewandroid: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"/><TextViewandroid: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" /><Viewandroid:background="#EEEEEE"android:layout_width="match_parent"android:layout_height="0.5dp"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><TextViewandroid: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" /><Viewandroid:background="#EEEEEE"android:layout_width="0.5dp"android:layout_height="match_parent"/><TextViewandroid: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() {@Overridepublic void onClick(View v) {System.exit(0);}});findViewById(R.id.negative_btn).setOnClickListener(new View.OnClickListener() {@Overridepublic 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。
下课!