1. 程式人生 > 其它 >A. Sticker Album(期望dp)

A. Sticker Album(期望dp)

技術標籤:安卓自定義控制元件androidjava安卓

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();
    }

教程結束,不足的地方使用到的小夥伴可以自行修改。寫下這個部落格也方便自己使用的時候方便。