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风格的对话框样式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-08-02 05:16:00

Android实现类似iOS风格的对话框实例代码的相关文章

控件-怎样创建一个类似下面风格的对话框

问题描述 怎样创建一个类似下面风格的对话框 左边是选项,右边是选项对应的对话框内容.用mfc做 解决方案 直接用单文本文档或者多文本文档可以做出整个框架(MFC 单文本文档 多文本文档) 解决方案二: 用树状列表+文件列表+文本框组合 解决方案三: easyui的tab功能也能做出那样的效果 解决方案四: fragement不解释

Android实现类似IOS右滑返回的效果(原因分析及解决办法)

使用类库SwipeBackLayout https://github.com/Issacw0ng/SwipeBackLayout 出现的问题: 1. 主Activity返回时黑屏或者返回只是看到桌面背景而没有看到上一个Activity界面 原因: 使用滑动返回需要在Activity的额主题中声明android:windowIsTranslucent=true,而该属性是设置Activity为是否为透明主题,当主Activity采用透明主题时,由于是app Activity栈中的第一个,所以滑动返

Android高仿QQ6.0侧滑删除实例代码_Android

推荐阅读: 先给大家分享一下,侧滑删除,布局也就是前面一个item,然后有两个隐藏的按钮(TextView也可以),然后我们可以向左侧滑动,然后显示出来,然后对delete(删除键)实现监听,就可以了哈.好了那就来看看代码怎么实现的吧. 首先和之前一样 自定义View,初始化ViewDragHelper: package com.example.removesidepull; import android.content.Context; import android.support.v4.wi

Android中文件的压缩和解压缩实例代码

使用场景 当我们在应用的Assets目录中需要加入文件时,可以直接将源文件放入,但这样会造成打包后的apk整体过大,此时就需要将放入的文件进行压缩.又如当我们需要从服务器中下载文件时,如果下载源文件耗时又消耗流量,较大文件需要压缩,可以使得传输效率大大提高.下面我们就学习下基本的文件压缩和解压缩.Java中提供了压缩和解压缩的输入输出流 public static void zip(String src,String dest) throwsIOException { //定义压缩输出流 Zip

Android TimeLine 时间节点轴的实现实例代码

整理文档,搜刮出一个Android TimeLine 时间节点轴的实现实例代码,稍微整理精简一下做下分享. 效果图 具体实现 (RecyclerView) 1.Adapter package com.haoren.timeline; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.vie

android判断设备是否有相机的实例代码

通过PackageManager可以判断android设备是否有相机 PackageManager pm = getPackageManager(); // FEATURE_CAMERA - 后置相机 // FEATURE_CAMERA_FRONT - 前置相机 if (!pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) && !pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT

Android高仿QQ6.0侧滑删除实例代码

推荐阅读: 先给大家分享一下,侧滑删除,布局也就是前面一个item,然后有两个隐藏的按钮(TextView也可以),然后我们可以向左侧滑动,然后显示出来,然后对delete(删除键)实现监听,就可以了哈.好了那就来看看代码怎么实现的吧. 首先和之前一样 自定义View,初始化ViewDragHelper: package com.example.removesidepull; import android.content.Context; import android.support.v4.wi

Android开发模仿qq视频通话悬浮按钮(实例代码)

模仿qq视频通话的悬浮按钮的实例代码,如下所示: public class FloatingWindowService extends Service{ private static final String TAG="OnTouchListener"; private static View mView = null; private static WindowManager mWindowManager = null; private static Context mContext

Android实现空心圆角矩形按钮的实例代码

页面上有时会用到背景为空心圆角矩形的Button,可以通过xml绘制出来. drawrable文件夹下bg_red_hollow_rectangle.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle&qu