当前位置: 移动技术网 > IT编程>移动开发>Android > Android如何自定义升级对话框示例详解

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

实验台,中央机关补录4000余公务员,我的电脑会说话粤语

前言

本文主要给大家介绍了关于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开发者们的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网