当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/25578.html

相关文章:

  • GinVueAdmin源码分析3-整合MySQL
  • 大数据框架之Hadoop:MapReduce(三)MapReduce框架原理——MapReduce开发总结
  • requests---(4)发送post请求完成登录
  • Python抓取数据具体流程
  • 【Python学习笔记】第二十四节 Python 正则表达式
  • 数字逻辑基础:原码、反码、补码
  • 有限差分法-差商公式及其Matlab实现
  • 高校就业信息管理系统
  • 【Java|golang】2373. 矩阵中的局部最大值
  • 根据指定函数对DataFrame中各元素进行计算
  • 【蓝桥杯集训·每日一题】AcWing 3502. 不同路径数
  • Java - 数据结构,二叉树
  • 模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)
  • 【壹】嵌入式系统硬件基础
  • 当参数调优无法解决kafka消息积压时可以这么做
  • Java线程池源码分析
  • 手撕八大排序(下)
  • SAP 详细解析SCC4
  • java异常分类和finally代码块中return语句的影响
  • 【链表OJ题(二)】链表的中间节点
  • 【强烈建议收藏:MySQL面试必问系列之并发事务锁专题】
  • Linux下使用Makefile实现条件编译
  • java 应用cpu飙升(超过100%)故障排查
  • 光学设计软件Ansys的Lumerical 2023版本下载与安装使用
  • Java 异常
  • JavaSE学习笔记day17
  • 【项目】Vue3+TS 动态路由 面包屑 查询重置 列表
  • 前脚背完这些接口自动化测试面试题,后脚就进了字节测试岗
  • termux 安装centos
  • 从菜鸟程序员到高级架构师,竟然是因为这个字final