一起Talk Android吧(第五百一十二回:自定义Dialog)

Posted talk_8

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起Talk Android吧(第五百一十二回:自定义Dialog)相关的知识,希望对你有一定的参考价值。

文章目录


各位看官们大家好,上一回中咱们说的例子是"自定义Dialog主题",这一回中咱们说的例子是" 自定义Dialog"。闲话休提,言归正转, 让我们一起Talk android吧!

整体思路

我们在上一章回中介绍了如何定义Dialog的主题,本章回将介绍如何自定义Dialog。

下面我分享一个整体的思路。自定义一个Dialog的子类,然后在此子类中使用自定义的主题和布局。布局的内容自己决定,我们把布局中的内容显示出来,并且可以响应相关的事件就可以。

这种自定义方式的思路就是我们在前面章回中介绍过的扩展系统组件,我们在这里扩展的组件是Dialog.

实现方法

有了整体的思路后,我们通过文字结合代码的方式来演示如何自定义Dialog。

第一步

创建Dialog的子类,我们没有直接继承Dialog而继承了它的子类AlertDialog

public class DialogCustom extends AlertDialog 
    //需要重写构造方法,这里就不列出来了
 

第二步

.创建Dialog对象,创建对象时绑定自定义的主题(也就是上一章回中介绍的主题)

mAlertDialog = new AlertDialog.Builder(mContext, R.style.CustomDialogTheme).create();

第三步

自定义布局文件,并且绑定到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"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

以上是关于一起Talk Android吧(第五百一十二回:自定义Dialog)的主要内容,如果未能解决你的问题,请参考以下文章

一起Talk Android吧(第三百一十二回:ImageView常用属性一)

一起Talk Android吧(第四百一十二回:Math类常用方法介绍)

一起Talk Android吧(第五百一十五回:绘制向外扩散的水波纹)

一起Talk Android吧(第五百一十九回:波浪上升动画)

一起Talk Android吧(第五百一十七回:绘制波浪效果)

一起Talk Android吧(第五百一十三回:Java中的byte数组与int变量相互转换)