欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android如何自定义升级对话框示例详解

程序员文章站 2023-12-14 16:34:28
前言 本文主要给大家介绍了关于android自定义升级对话框的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 实现的效果如下所示...

前言

本文主要给大家介绍了关于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();
   }
  });
 }

此时界面是这样的

Android如何自定义升级对话框示例详解

可以看到 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);
   }
  }
 }

这里设置占据屏幕宽度的百分之七十

效果图如下所示

Android如何自定义升级对话框示例详解

此时 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开发者们的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。

上一篇:

下一篇: