Android如何自定义升级对话框示例详解
程序员文章站
2023-12-04 10:16:10
前言
本文主要给大家介绍了关于android自定义升级对话框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
实现的效果如下所示...
前言
本文主要给大家介绍了关于android自定义升级对话框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
实现的效果如下所示
其实这也只是一个dialogfragment 而已,重点只是在于界面的设计
想要使用做出这样一个dialogfragment ,需要自定义一个view,然后将该view传入到该dialog中
先定义布局,一个textview用于标题,一个textview用于升级内容阐述,一个imageview,一个确认升级的按钮
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <textview android:id="@+id/tv_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="20dp" android:gravity="center" android:textcolor="#0474dc" android:textsize="22sp" android:textstyle="bold" /> <textview android:id="@+id/tv_description" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margintop="15dp" android:gravity="center" android:textcolor="#0474dc" android:textsize="18sp" /> <imageview android:layout_width="70dp" android:layout_height="70dp" android:layout_gravity="center" android:layout_marginbottom="20dp" android:layout_margintop="20dp" android:src="@drawable/upgrade" /> <button android:id="@+id/btn_upgrade" style="@style/bluebuttonstyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginbottom="20dp" android:layout_marginend="20dp" android:layout_marginstart="20dp" android:gravity="center" android:text="立即更新" /> </linearlayout>
当中,按钮需要用到自定义style
<!--用于按钮的蓝色背景风格--> <style name="bluebuttonstyle" parent="widget.appcompat.button.borderless"> <item name="android:background">@drawable/button_blue_background</item> <item name="android:textappearance">@style/bluebuttontextstyle</item> </style> <!--用于蓝色风格按钮的文本风格--> <style name="bluebuttontextstyle"> <item name="android:textcolor">@android:color/white</item> <item name="android:textsize">17sp</item> </style>
建立 dialogfragment 的子类
/** * 作者: 叶应是叶 * 时间: 2017/3/23 12:36 * 描述: */ public class versiondialogfragment extends dialogfragment { private static final string title = "title"; private static final string description = "description"; private view.onclicklistener positivecallback; private string title; private string description; public static versiondialogfragment getinstance(string title, string description) { bundle bundle = new bundle(); bundle.putstring(title, title); bundle.putstring(description, description); versiondialogfragment versiondialogfragment = new versiondialogfragment(); versiondialogfragment.setarguments(bundle); return versiondialogfragment; } @override public void oncreate(@nullable bundle savedinstancestate) { super.oncreate(savedinstancestate); bundle bundle = getarguments(); title = bundle.getstring(title); description = bundle.getstring(description); } public void show(fragmentmanager fragmentmanager, view.onclicklistener positivecallback) { this.positivecallback = positivecallback; show(fragmentmanager, "versiondialogfragment"); } @nonnull @override public dialog oncreatedialog(bundle savedinstancestate) { alertdialog.builder builder = new alertdialog.builder(getactivity()); layoutinflater inflater = getactivity().getlayoutinflater(); final view view = inflater.inflate(r.layout.version_dialog, null); textview tv_title = (textview) view.findviewbyid(r.id.tv_title); textview tv_description = (textview) view.findviewbyid(r.id.tv_description); button btn_upgrade = (button) view.findviewbyid(r.id.btn_upgrade); tv_title.settext(title); tv_description.settext(description); btn_upgrade.setonclicklistener(positivecallback); builder.setview(view); return builder.create(); } }
然后再到 mainactivity 中调用dialog
public void showdialog(view view) { final versiondialogfragment dialogfragment = versiondialogfragment.getinstance("2.0.1新版本发布啦", "更多功能等你体验"); dialogfragment.show(getsupportfragmentmanager(), new view.onclicklistener() { @override public void onclick(view v) { toast.maketext(mainactivity.this, "进行更新操作吧", toast.length_short).show(); dialogfragment.dismiss(); } }); }
此时界面是这样的
可以看到 dialog 中有较大的空白区,显得有点虚浮
这里可以选择在 versiondialogfragment 的 onstart() 方法中指定 dialog 所占屏幕宽度的比例
@override public void onstart() { super.onstart(); dialog dialog = getdialog(); if (dialog != null) { displaymetrics dm = new displaymetrics(); getactivity().getwindowmanager().getdefaultdisplay().getmetrics(dm); if (dialog.getwindow() != null) { dialog.getwindow().setlayout((int) (dm.widthpixels * 0.7), viewgroup.layoutparams.wrap_content); } } }
这里设置占据屏幕宽度的百分之七十
效果图如下所示
此时 dialog 的四个角还都是直的,这里再来将之修改为圆角
在drawable文件夹下新建一个root.xml文件,作为dialog使用到的布局的根layout的背景
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="20dp" /> <solid android:color="#ffffff" /> </shape>
@override public void onstart() { super.onstart(); dialog dialog = getdialog(); if (dialog != null) { displaymetrics dm = new displaymetrics(); getactivity().getwindowmanager().getdefaultdisplay().getmetrics(dm); if (dialog.getwindow() != null) { dialog.getwindow().setlayout((int) (dm.widthpixels * 0.8), viewgroup.layoutparams.wrap_content); } } }
然后再修改onstart()方法,为dialog的window设置透明背景色
@override public void onstart() { super.onstart(); dialog dialog = getdialog(); if (dialog != null) { displaymetrics dm = new displaymetrics(); getactivity().getwindowmanager().getdefaultdisplay().getmetrics(dm); if (dialog.getwindow() != null) { dialog.getwindow().setlayout((int) (dm.widthpixels * 0.7), viewgroup.layoutparams.wrap_content); dialog.getwindow().setbackgrounddrawableresource(android.r.color.transparent); } } }
这样,总的效果就都完成了
这里提供示例代码下载:android 自定义升级对话框
总结
以上就是这篇文章的全部内容了,希望本文的内容对各位android开发者们的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。