Android实现类似iOS风格的对话框实例代码
程序员文章站
2023-12-16 21:36:46
分享一个简单的常用的对话框类,按照国际惯例,先上图
布局简单,先上布局。一个标题,一个内容,两个按钮
分享一个简单的常用的对话框类,按照国际惯例,先上图
布局简单,先上布局。一个标题,一个内容,两个按钮
<relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <linearlayout android:layout_width="270dp" android:layout_height="wrap_content" android:layout_centerhorizontal="true" android:layout_centervertical="true" android:background="@drawable/shape_diglog_bg" android:orientation="vertical"> <textview android:id="@+id/dialog_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_margintop="10dp" android:text="这里是标题" android:textcolor="#333333" android:textsize="19sp" android:visibility="visible" /> <textview android:id="@+id/dialog_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginbottom="30dp" android:layout_marginleft="10dp" android:layout_marginright="10dp" android:layout_margintop="30dp" android:text="这里是内容" android:textcolor="#333333" android:textsize="17sp" android:textstyle="bold" /> <view android:layout_width="match_parent" android:layout_height="1dp" android:layout_margintop="18sp" android:background="#f1f1f1" /> <linearlayout android:id="@+id/ll_button" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <button android:id="@+id/dialog_cancel" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@null" android:text="取消" android:textcolor="#006dff" android:textsize="17sp" /> <view android:layout_width="1dp" android:layout_height="match_parent" android:background="#f1f1f1" /> <button android:id="@+id/dialog_ensure" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:background="@null" android:text="确定" android:textcolor="#006dff" android:textsize="17sp" /> </linearlayout> </linearlayout> </relativelayout>
接着就是自定义类!
首先,新建类继承dialog
public class commondialog extends dialog
接着是构造函数,在构造函数中定义样式
public commondialog(@nonnull context context) { super(context, r.style.dialog_common); mcontext = context; setcontentview(r.layout.dialog_common); butterknife.bind(this); }
其中,在style中定义对话框属性
<style name="dialog_common" parent="android:style/theme.dialog"> <!--说明提示框是否有边框--> <item name="android:windowframe">@null</item> <!--说明提示框是否有标题--> <item name="android:windownotitle">true</item> <!--设置提示框的背景颜色是什么--> <item name="android:windowbackground">@android:color/transparent</item> <!--是否浮现在activity之上--> <item name="android:windowisfloating">true</item> <!--是否有遮盖--> <item name="android:windowcontentoverlay">@null</item> <!--说明提示框是滞是透明的--> <item name="android:windowistranslucent">true</item> <!--说明是否充许对话框的背景变暗。为true则充许变暗--> <item name="android:backgrounddimenabled">true</item> <!--设置背景透明度--> <item name="android:backgrounddimamount">0.4</item> </style>
紧接着,提供四个变量来存储设置的标题、内容以及两个按钮的文字
private string title; private string content; private string cancel; private string ensure;
现在需要提供能够设置标题、内容以及两个按钮的文字的方法
/* * 设置标题 默认没有标题 * * @param title */ public void settitle(string title) { this.title = title; } /** * 设置内容 默认为空 * * @param content */ public void setcontent(string content) { this.content = content; } /** * 设置确定按钮内容 默认为确定 * * @param ensure */ public void setensure(string ensure) { this.ensure = ensure; } /** * 设置取消按钮内容 默认为取消 * * @param cancel */ public void setcancel(string cancel) { this.cancel = cancel; }
现在,处理按钮的点击事件
/** * 确定按钮事件监听 默认是dismiss对话框 * * @param onensureclicklistener */ public void setonensureclicklistener(view.onclicklistener onensureclicklistener) { this.onensureclicklistener = onensureclicklistener; } /** * 取消按钮事件监听 默认是dismiss对话框 * * @param oncabcelclicklistener */ public void setoncancelclicklistener(view.onclicklistener oncabcelclicklistener) { this.oncancelclicklistener = oncabcelclicklistener; }
默认的是点击对话框消失
/** * 默认点击事件,点击弹框消失 */ private view.onclicklistener onclicklistenerdismiss = new view.onclicklistener() { @override public void onclick(view v) { dismiss(); } };
最后,重写父类的show方法,将展示之前设置的各种信息
/** * 重写show方法 */ @override public void show() { if (textutils.isempty(title)) { //默认没有标题 dialogtitle.setvisibility(view.gone); } else { //默认不设置内容,则内容太为空 dialogtitle.setvisibility(view.visible); settextviewtxt(dialogtitle, title); } if (textutils.isempty(cancel)) { //默认取消按钮文字为"取消" cancel = mcontext.getstring(r.string.cancel); } if (textutils.isempty(ensure)) { //默认确认按钮文字为"确认" ensure = mcontext.getstring(r.string.ensure); } //设置文字信息 settextviewtxt(dialogcontent, content); settextviewtxt(dialogcancel, cancel); settextviewtxt(dialogensure, ensure); //设置点击事件 setbuttononclicklistener(dialogcancel, oncancelclicklistener); setbuttononclicklistener(dialogensure, onensureclicklistener); super.show(); }
最最后,献上在activity中如何使用该对话框的方法的代码
public class mainactivity extends appcompatactivity { @bindview(r.id.btn_demo_havetitle) button btndemohavetitle; @bindview(r.id.btn_demo_notitle) button btndemonotitle; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); butterknife.bind(this); } @onclick({r.id.btn_demo_havetitle, r.id.btn_demo_notitle}) public void onclick(view view) { switch (view.getid()) { //没有标题的对话框 case r.id.btn_demo_havetitle: final commondialog dialog1 = new commondialog(this); dialog1.settitle("提示"); dialog1.setcontent("是否确认退出?"); dialog1.setonensureclicklistener(new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(mainactivity.this,"点击了确认",toast.length_short).show(); // todo: 2017/9/17 这里写你的代码 dialog1.dismiss(); } }); dialog1.show(); break; //有标题的对话框 case r.id.btn_demo_notitle: final commondialog dialog2 = new commondialog(this); //不设置标题默认没有标题 dialog2.setcontent("是否确认退出?"); dialog2.setonensureclicklistener(new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(mainactivity.this,"点击了确认",toast.length_short).show(); // todo: 2017/9/17 这里写你的代码 dialog2.dismiss(); } }); dialog2.show(); break; } } }
总结
以上所述是小编给大家介绍的android实现类似ios风格的对话框样式,希望对大家有所帮助