天天看點

一起Talk Android吧(第五百一十二回:自定義Dialog)整體思路實作方法

文章目錄

  • 整體思路
  • 實作方法
    • 第一步
    • 第二步
    • 第三步
    • 第四步

各位看官們大家好,上一回中咱們說的例子是"自定義Dialog主題",這一回中咱們說的例子是" 自定義Dialog"。閑話休提,言歸正轉, 讓我們一起Talk Android吧!

整體思路

我們在上一章回中介紹了如何定義Dialog的主題,本章回将介紹如何自定義Dialog。

下面我分享一個整體的思路。自定義一個Dialog的子類,然後在此子類中使用自定義的主題和布局。布局的内容自己決定,我們把布局中的内容顯示出來,并且可以響應相關的事件就可以。

這種自定義方式的思路就是我們在前面章回中介紹過的擴充系統元件,我們在這裡擴充的元件是Dialog.

實作方法

有了整體的思路後,我們通過文字結合代碼的方式來示範如何自定義Dialog。

第一步

建立Dialog的子類,我們沒有直接繼承Dialog而繼承了它的子類AlertDialog

public class DialogCustom extends AlertDialog {
    //需要重寫構造方法,這裡就不列出來了
} 
           

第二步

.建立Dialog對象,建立對象時綁定自定義的主題(也就是上一章回中介紹的主題)

第三步

自定義布局檔案,并且綁定到Dialog上,可以使用Dialog的Builder綁定,也可以使用window綁定;

Window window = mAlertDialog.getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        
        //layoutId是自定義的布局id
        View contentView = LayoutInflater.from(mContext).inflate(layoutId,null);
//        builder.setView(contentView);
//        builder.setView(R.layout.dialog_input_content_view);
        //使用Window的setView效果好一些
        window.setContentView(contentView);
           

第四步

顯示布局中的元件,給元件添加事件響應;

mBTYes = (Button) window.findViewById(R.id.id_bt_dialog_yes);
    mBTNo = (Button) window.findViewById(R.id.id_bt_dialog_no);

    mBTYes.setOnClickListener(v -> onYesButtonClicked());
    mBTNo.setOnClickListener(v -> onNoButtonClicked());

    mTitle = (TextView)window.findViewById(R.id.id_dialog_cust_info_title) ;
    mContent =(TextView)window.findViewById(R.id.id_dialog_cust_info_content) ;

    mTitle.setText("Custom dialog Title");
    mContent.setText("This is a content");
           

在自定義的布局中我們使用

TextView

來顯示Dialog的标題和消息内容;使用Button來響應Yes/No事件,我們隻列出了事件的方法,沒有列出這些方法的實作内容,我推薦的做法是建立監聽器,讓調用Dialog的程式來實作監聽器,這樣可以更加靈活地使用Dialog。畢竟系統元件中的Dialog也是這麼做的。下面是示例代碼:

private void onYesButtonClicked () {
    if(mYesBTClickedListener != null) {
        mYesBTClickedListener.onBTClicked();
        mAlertDialog.dismiss();
    }
}

private void onNoButtonClicked () {
    if(mNoBTClickedListener != null) {
        mNoBTClickedListener.onBTClicked();
        mAlertDialog.dismiss();
    }
}

public interface OnYesBTClickedListener {
    void onBTClicked();
}

public interface OnNoBTClickedListener {
    void onBTClicked();
}

public void setYesBTClickedListener(OnYesBTClickedListener yesBTClickedListener) {
    mYesBTClickedListener = yesBTClickedListener;
}

public void setNoBTClickedListener(OnNoBTClickedListener noBTClickedListener) {
    mNoBTClickedListener = noBTClickedListener;
}
           

所有代碼ok後還需要調用Dialog的

show

()方法來顯示Dialog。我在這裡就不示範程式的運作結果了,建議大家自己動手去實踐。

看官們,關于"

自定義Dialog

"的例子咱們就介紹到這裡,欲知後面還有什麼例子,且聽下回分解!