创建自定义AlertDialog
没什么特别的地方,只是自定义弹出一个简单的对话框。
效果图:
首先定义一个布局文件 custom_dialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="200dp"android:layout_height="wrap_content"android:background="@drawable/stroke"><TextView
android:id="@+id/dialog_msg"android:layout_width="200dp"android:layout_height="40dp"android:textColor="@color/colorPrimary"android:textSize="18sp"android:text="确认是否发布?"android:layout_gravity="center_horizontal"android:gravity="center_horizontal"android:layout_marginTop="10dp"android:layout_marginBottom="40dp"/><View
android:layout_width="200dp"android:layout_height="1dp"android:background="@color/colorPrimaryDark"/><LinearLayout
android:layout_width="200dp"android:layout_height="30dp"android:orientation="horizontal"><TextView
android:id="@+id/cancel_btn"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:textSize="18sp"android:gravity="center"android:text="取消"/><View
android:layout_width="1dp"android:layout_height="match_parent"android:background="@color/colorPrimary"/><TextView
android:id="@+id/yes_btn"android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:textSize="18sp"android:gravity="center"android:text="确定"android:textColor="#000"/></LinearLayout></LinearLayout>
创建CustomDialog继承Dialog,需要重写构造方法,这里我们在super()中把Theme写死,避免每次都要传入样式,不过也可以更灵活地把Theme放在构造方法的参数中,每次使用弹窗可引不同的style,也可以把要填充的布局文件放入构造方法的参数中传递进来,不过这样就需要再定义不同的控件响应时间(因为引入不同的布局文件,那么控件类型和ID肯定也会有变化了)
style文件dialog.xml:
<style name="dialog" parent="android:Theme.Dialog"><!--表示控件浮在屏幕上,居中--><item name="android:windowIsFloating">true</item><!--去掉Dialog的标题(因为要使用我们自定义的)--><item name="android:windowNoTitle">true</item><!--Dialog的背景颜色,这里empty的值为#0000,表示透明--><item name="android:windowBackground">@color/empty</item></style>
CustomDialog.java文件:
/*** Created by Commy on 2016/8/23.*/
public abstract class CustomDialog extends Dialog{private Context mContext;private String msg;public CustomDialog(Context context,String msg) {super(context,R.style.dialog);mContext = context;this.msg = msg;/*填充自定义弹窗布局文件*/LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);View layout = inflater.inflate(R.layout.custom_dialog,null);
// 获取提示内容TextView控件:TextView message = (TextView)layout.findViewById(R.id.dialog_msg);message.setText(this.msg);setContentView(layout);bindLayoutClick(layout);this.show();}/*** 设置按钮点击相应:* @param layout*/public void bindLayoutClick(View layout){TextView btn_yes = (TextView)layout.findViewById(R.id.yes_btn),btn_no = (TextView)layout.findViewById(R.id.cancel_btn);btn_yes.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {clickYes();dismiss();}});btn_no.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {clickNo();dismiss();}});}/*定义按钮点击事件:*/public abstract void clickYes();public abstract void clickNo();
}
最后在活动界面就可以定义一个按钮弹窗啦~
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button alertDialog = (Button)findViewById(R.id.alert);alertDialog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {CustomDialog customDialog = new CustomDialog(MainActivity.this,"这是个弹窗") {@Overridepublic void clickYes() {showToast("点击了positive");}@Overridepublic void clickNo() {showToast("点击了negative");}};}});}public void showToast(String msg){Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();}
}
至此,自定义AlertDialog的步骤就完成了,完整代码:
自定义Alertdialog完整代码,点我~
创建自定义AlertDialog相关推荐
- 如何在android中创建自定义对话框?
本文翻译自:How to create a Custom Dialog box in android? I want to create a custom dialog box like below ...
- android datepicker 自定义,android – 如何使用两个datepicker创建自定义对话框?
最好先阅读 Dialogs和 Pickers. 至于实现,您可以有两个按钮:一个用于显示开始日期的日期选择器,另一个用于显示结束日期. 编辑:如果你真的想在1个对话框中显示2个日期选择器,这里有一个如 ...
- Android 自定义AlertDialog类
还是先从最简单的开始吧,然后一步一步的扩展. 为了保证软件上所谓的低耦合度和可重用性,这里不得不需要单独建立一个类CustomerDialog,然后继承AlertDialog public class ...
- 自定义AlertDialog.Builder对话框
在工作中,原生态的AlertDialog已经远远不能满足我们工作的需求,这时候,就需要使用自定义的AlertDialog.Builder: 在自定义之前,我们先了解下, **原生态的AlertDial ...
- Delta3D———通过游戏管理器组件和消息的扩展创建自定义行为 《转》
游戏管理器组件给我们提供了在不修改游戏管理器的情况下灵活扩展我们的自定义行为的能力.游戏管理器组件是基于消息来工作的,定义自定义行为的基本 流程就是创建自定义类型的消息,在合适的时候发送消息,创建自定 ...
- 小D学blend-----如何创建自定义的Tooltip控件
运行环境:blend 4.0或者blend 3.0 +silverlight 3.0(其实我相信步骤应该是差不多的) 语言:C# Tooltip类:它是表示一个长方形的小弹出窗口,该窗口在用户将指针悬 ...
- 为 ASP.NET Datagrid 创建自定义列
Marcie Robillard DatagridGirl.com 2003 年 9 月 简介 不得不承认,为 Microsoft® ASP.NET 编写 Datagrid 代码包括大量的重复工作.尽 ...
- reddit_如何使用Python创建自定义Reddit通知系统
reddit by Kelsey Wang 王凯西 如何使用Python创建自定义Reddit通知系统 (How to make a custom Reddit notification system ...
- 如何使用Bootstrap4和ES6创建自定义确认框
by Prashant Yadav 通过Prashant Yadav 如何使用Bootstrap4和ES6创建自定义确认框 (How to create a custom confirm box wi ...
最新文章
- java 搭建企业应用框架_溯源微服务开发体系:一位Java开发者的转型思考
- plus 什么是mybais_谈谈自己用mybatis-plus中的一些经验。
- sqlite3.h:没有那个文件或目录
- red hat 5.3补丁_您如何解释组织的宗旨? 来自Red Hat的3课
- 经济学专业向计算机方向创业,基于市场需求的经济学专业人才培养模式研究
- python怎么编辑文件_关于python:如何在Google Colab中编辑和保存文本文件(.py)?
- linux清除asm磁盘分区,ASM Diskgroup添加与删除
- Hexo为文章设置目录与标签的方法
- linux 文件系统简介
- 电影图标:杀死比尔(Kil Bill)
- 多传感器融合方法综述
- oracle cube,oracle rollup和cube分析
- qevent 事件的accept()和ignore()
- supervisor原理及如何使用
- 数据治理:认识数据治理
- Sprite 从PS切图到具体实现完整过程
- Naive Deco Sans手写不规则线条字体 for mac
- 2012年1月微软MVP申请开始!
- html 屏幕垂直居中显示,页面内容居中设置(水平居中与垂直居中)
- pcs for linux7下载,BaiduPCS-Go