? ? ? ?在原生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。
下課!?