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

Android实现类似iOS风格的对话框实例代码

程序员文章站 2023-12-19 19:24:52
分享一个简单的常用的对话框类,按照国际惯例,先上图 布局简单,先上布局。一个标题,一个内容,两个按钮

分享一个简单的常用的对话框类,按照国际惯例,先上图

Android实现类似iOS风格的对话框实例代码

布局简单,先上布局。一个标题,一个内容,两个按钮

<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风格的对话框样式,希望对大家有所帮助

上一篇:

下一篇: