A. Sticker Album(期望dp)
阿新 • • 發佈:2021-01-27
Android<安卓>簡介美觀超簡單自定義對話方塊
安卓超級簡單的自定義對話方塊,一般用於使用者操作確認,比如刪除,新增,退出系統等操作,廢話少說直接入重點。上程式碼。
xml程式碼,利用相對佈局完成:佈局方式看個人習慣。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android: layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:padding="10dp">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/deletedialog_bg">
<TextView
android:id="@+id/tv_hint_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="25dp"
android:text="確定刪除此記錄嗎?"
android:textColor="#000"
android:textSize="18sp"
android:textStyle="bold" />
<!-- 分割線-->
<View
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:layout_below="@id/tv_hint_text"
android:layout_marginTop="20dp"
android:background="#f0f0f0" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_below="@id/linear">
<Button
android:id="@+id/btn_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="50dp"
android:background="@null"
android:text="取消"
android:textColor="#3399ff"
android:textSize="16sp" />
<View
android:layout_width="0.5dp"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:background="#f0f0f0" />
<Button
android:id="@+id/btn_confirm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="50dp"
android:background="@null"
android:text="確定"
android:textColor="#e79686"
android:textSize="16sp" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
接下來是對話方塊的背景樣式程式碼,也沒有什麼太多東西,僅僅是給對話方塊設定圓角。
還有對內的padding值,如果不需要可以註釋掉,可以自己做後續的修改。程式碼內也多處備註標出。
上程式碼:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 填充背景 -->
<solid android:color="#fff" />
<!-- 設定圓角 圓角分為上下左右四個,也可以直接統一全部設定 -->
<corners android:topLeftRadius="10dp"
android:topRightRadius="10dp"
android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"/>
<!-- 設定描邊 -->
<stroke
android:width="0dp"
android:color="#b3b2b2" />
<!-- 調整距離,邊距根據自己的需要自己調,不要註釋掉就好 -->
<!-- <padding-->
<!-- android:bottom="8dp"-->
<!-- android:left="8dp"-->
<!-- android:right="8dp"-->
<!-- android:top="8dp" />-->
</shape>
佈局完成以後看效果,見圖1。
圖1
佈局完成以後我們開始著手寫後臺程式碼,編寫一個OperationConfirmDialog類檔案,繼承自Dialog。
然後我們需要考慮三個內容。1:提示文字,2:第一個按鈕,3:第三個按鈕。
如果需要自定義三個控制元件文字的內容可以提供多個構造。
兩個監聽事件函式,都接收一個View.OnClickListener Listener形參,在傳參的時候直接new一個即可,這與官方的方法也是類似的。
程式碼中多處備註,請看程式碼:
package com.bin.testdemo;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.annotation.NonNull;
public class OperationConfirmDialog extends Dialog {
private Context context;//上下文
private TextView tv_hint_text;//提示文字
private Button btn_cancel, btn_confirm;//兩個按鈕,初始為取消以及確定
// 不自定義文字內容
public OperationConfirmDialog(@NonNull Context context) {
super(context, R.style.operation_confirm_dialog);
// 膨脹器獲取佈局檔案
View view = LayoutInflater.from(getContext()).inflate(R.layout.operation_confirm_dialog, null);
//尋找各個控制元件的ID
tv_hint_text = view.findViewById(R.id.tv_hint_text);
btn_cancel = view.findViewById(R.id.btn_cancel);
btn_confirm = view.findViewById(R.id.btn_confirm);
// 設定對話方塊的View
setContentView(view);
}
//自定義文字內容
public OperationConfirmDialog(@NonNull Context context, String hint_text, String cancel, String confirm) {
super(context, R.style.operation_confirm_dialog);
// 膨脹器獲取佈局檔案
View view = LayoutInflater.from(getContext()).inflate(R.layout.operation_confirm_dialog, null);
//尋找各個控制元件的ID
tv_hint_text = view.findViewById(R.id.tv_hint_text);
btn_cancel = view.findViewById(R.id.btn_cancel);
btn_confirm = view.findViewById(R.id.btn_confirm);
// 設定對話方塊的View
setContentView(view);
// 如果傳入的引數不為空再設定文字,否則使用預設文字
if ("".equals(hint_text) && "".equals(cancel) && "".equals(confirm) && hint_text != null && cancel != null && confirm != null) {
// 設定提示內容
tv_hint_text.setText(hint_text);
// 設定第一個按鈕文字
btn_cancel.setText(cancel);
// 設定第二個按鈕文字
btn_confirm.setText(confirm);
}
}
//新增按鈕監聽
public void setBtn_cancel_listener(View.OnClickListener listener) {
btn_cancel.setOnClickListener(listener);
}
// 確定按鈕
public void setBtn_confirm_listener(View.OnClickListener listener) {
btn_confirm.setOnClickListener(listener);
}
}
佈局檔案以及後臺類已經全部寫好,事情就變得簡單起來了,直接在想要的場景當中new出例項使用即可,下面是引用程式碼:
// 自定義刪除對話方塊函式 封裝起來比較方便維護
private void ShowDeleteDialog() {
// 例項化對話方塊 根據需要傳遞引數,如果不需要自定義文字直接傳入null值即可
OperationConfirmDialog myDialogDelete = new OperationConfirmDialog(this);
myDialogDelete.setBtn_confirm_listener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "刪除成功", Toast.LENGTH_SHORT).show();
myDialogDelete.dismiss();
}
});
myDialogDelete.setBtn_cancel_listener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "取消成功", Toast.LENGTH_SHORT).show();
myDialogDelete.dismiss();
}
});
// 最後別忘了呼叫show方法哦
myDialogDelete.show();
}
教程結束,不足的地方使用到的小夥伴可以自行修改。寫下這個部落格也方便自己使用的時候方便。