文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android如何实现类似iOS风格的对话框

2023-05-30 20:45

关注

这篇文章将为大家详细讲解有关Android如何实现类似iOS风格的对话框,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

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

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;

现在需要提供能够设置、内容以及两个按钮的文字的方法

   public void setTitle(String title) {  this.title = title; }  public void setContent(String content) {  this.content = content; }  public void setEnsure(String ensure) {  this.ensure = ensure; }  public void setCancel(String cancel) {  this.cancel = cancel; }

现在,处理按钮的点击事件

 public void setOnEnsureClickListener(View.OnClickListener onEnsureClickListener) {  this.onEnsureClickListener = onEnsureClickListener; }  public void setOnCancelClickListener(View.OnClickListener onCabcelClickListener) {  this.onCancelClickListener = onCabcelClickListener; }

默认的是点击对话框消失

  private View.OnClickListener onClickListenerDismiss = new View.OnClickListener() {  @Override  public void onClick(View v) {   dismiss();  } };

最后,重写父类的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风格的对话框”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯