Dialog(一)------基础应用篇
来源:互联网 发布:守望先锋英雄数据库 编辑:程序博客网 时间:2024/06/05 02:21
前言:最近在做列表的删除功能,应为Android的滑动删除不是那么轻松就能够完成,虽然也可以实现,但是担心后期内容模块的更新,会增加一些更复杂的滑动一些列操作,因此采用点击按钮删除,之后弹出提示框来确认用户是否删除,不排除误点情况,然后发现原生的Dialog是太丑了,于是便小小研究了一番,也查看一些人博客,再次特此感谢。。,下面就开始,最基础的dialog吧。
一、最简单的dialog(标题和提示内容)
1、首先创建一个Dialog:
在构造方法里有四种:
(1)Dialog dialog = new Dialog(this);(2)AppCompatDialog appCompatDialog = new AppCompatDialog(this);(3)android.support.v7.app.AlertDialog alertDialog=new android.support.v7.app.AlertDialog();(4)android.app.AlertDialog alertDialog1 = new android.app.AlertDialog(this);
这四种方法,其中(2)是继承(1),(3)是继承(2),(4)直接继承(1),由于(1)(2)的功能较单一(个人观点),因此选择使用(3)(4),
然而(3)(4)的构造是方法是protected关键词修饰,无法直接引用,因此只能使用推荐的设计模式的builder模式来进行构造,以(3)为例:
android.support.v7.app.AlertDialog.Builder builder=new android.support.v7.app.AlertDialog.Builder(this); builder.setTitle("title");//设置标题 builder.setMessage("message");//设置信息内容 android.support.v7.app.AlertDialog alertDialog = builder.create();//通过builder创建dialog alertDialog.show();//显示dialog alertDialog.dismiss();//取消dialog
先创建一个Builder,让后通过builder来设置dilog的标题 、内容等,通过create来构造出alertDialog,在通过alertDialog的show方法来显示dialog,dismiss来取消dialog。
友情提示:在使用v7包里的AlertDialog时,其构造方法有:
(1)protected AlertDialog(Context context) (2)protected AlertDialog(Context context, @StyleRes int themeResId) (3)protected AlertDialog(Context context, boolean cancelable,OnCancelListener cancelListener)
在本例中我们采用的是第(1)种,只传了上下文的引用,(2)则需要另外传一个AlertDialog的样式,(3)和(1)一样不需要传入相应样式,这里要注意,之所不用传入样式,是因为它会自动解析传入的context的样式,如果传入context所持有的样式不是Them.AppCompat则会报错:
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
解决方法:改变context的样式或者利用第二中方法手动给添加一个Them.AppCompat样式。
2、按钮和小图标
(1)小图标:通过builer.setIcon()会在标题的左侧添加一个小图标;
(2)按钮:google为我们提供了三个选择按钮,左按钮,右按钮,中间按钮,分别对应三个设置方法:
Builder.setPositiveButton(string,DialogInterface.OnClickListener);//确定按钮Builder.setNegativeButton(string,DialogInterface.OnClickListener);//取消按钮Builder.setNeutralButton(string,DialogInterface.OnClickListener);//中间按钮
友情提示,默认的三个按钮,中间按钮无论把它放在代码的什么位置,她始终都是在中间的,和代码的设置的顺序无关,其他两个按钮也是一样,和代码的位置是无关的,不会因为在代码中先谢了确定按钮,在现实时确定按钮就在左边,不是这样,他和系统的样式是相关联的,系统样式中定义的确定按钮在那边显示他就会在哪边显示!贴出相对完整代码:
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this, R.style.mydialog); builder.setIcon(R.mipmap.ic_launcher_round);//添加小图标icon builder.setTitle("title");//设置标题 builder.setMessage("message");//设置信息内容 builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "确定按钮", Toast.LENGTH_SHORT).show(); } }); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show(); } }); builder.setNeutralButton("中间", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "中间", Toast.LENGTH_SHORT).show(); } }); android.support.v7.app.AlertDialog alertDialog = builder.create();//通过builder创建dialog alertDialog.show();//显示dialog
效果图不在给出,实践检验真理,请自行尝试查看效果!
3、三个按钮的统一监听,在上面 分别对三个按钮进行设置监听,有点不优雅,于是系统有提供了一个相应的监听方法来统一,实现更优雅的监听:
public interface DialogInterface { /** * The identifier for the positive button. */ public static final int BUTTON_POSITIVE = -1; /** * The identifier for the negative button. */ public static final int BUTTON_NEGATIVE = -2; /** * The identifier for the neutral button. */ public static final int BUTTON_NEUTRAL = -3; interface OnClickListener { public void onClick(DialogInterface dialog, int which); } }
我们只需要实现这个接口,并对每个按钮进行设置就可以了,其中参数which映射的是BUTTON_POSITIVE、BUTTON_NEGATIVE、BUTTON_NEUTRAL三个按钮,具体代码如下:
public void makeDialog3(View view) { android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this, R.style.mydialog); builder.setIcon(R.mipmap.ic_launcher_round);//添加小图标icon builder.setTitle("title");//设置标题 builder.setMessage("message");//设置信息内容 builder.setPositiveButton("确定", onClickListener); builder.setNegativeButton("取消", onClickListener); builder.setNeutralButton("中间", onClickListener); android.support.v7.app.AlertDialog alertDialog = builder.create();//通过builder创建dialog alertDialog.show();//显示dialog } private DialogInterface.OnClickListener onClickListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case DialogInterface.BUTTON_POSITIVE: Toast.makeText(MainActivity.this, "确定按钮", Toast.LENGTH_SHORT).show(); break; case DialogInterface.BUTTON_NEGATIVE: Toast.makeText(MainActivity.this, "取消按钮", Toast.LENGTH_SHORT).show(); break; case DialogInterface.BUTTON_NEUTRAL: Toast.makeText(MainActivity.this, "中间按钮", Toast.LENGTH_SHORT).show(); break; } } };
二、自定义布局:
我们这里只进行静态的布局方式(通过xml来布局),动态布局不做讲解(通过代码来创建布局并添加相应的控件模块)
public Builder setView(int layoutResId) ;public Builder setView(View view) ;
我们可以通过设置View或者布局文件id来进行自定义布局,例如文件:
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="100dp" android:layout_margin="30dp" android:orientation="vertical" app:cardCornerRadius="20dp" app:cardElevation="10dp" app:cardBackgroundColor="@android:color/holo_blue_bright" app:contentPadding="15dp"> <LinearLayout android:layout_width="match_parent" android:orientation="horizontal" android:layout_height="match_parent"> <ImageView android:layout_width="wrap_content" android:src="@mipmap/ic_launcher" android:layout_gravity="center_vertical" android:layout_height="wrap_content"/> <TextView android:layout_width="wrap_content" android:layout_gravity="center_vertical" android:gravity="center" android:layout_height="match_parent" android:text="mydialog"/> </LinearLayout></android.support.v7.widget.CardView>
(1)setView(View view):使用设置View来自定义:
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this, R.style.mydialog); View myView = LayoutInflater.from(this).inflate(R.layout.myview, null); TextView content = (TextView) myView.findViewById(R.id.content); content.setText("设置你要设置的内容"); builder.setView(content); android.support.v7.app.AlertDialog alertDialog = builder.create();//通过builder创建dialog alertDialog.show();//显示dialog
(2)setView(int layoutResId),设置布局ID来定义:
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this, R.style.mydialog); builder.setView(R.layout.myview); TextView content = (TextView) findViewById(R.id.content); content.setText("设置你要设置的内容"); builder.setView(content); android.support.v7.app.AlertDialog alertDialog = builder.create();//通过builder创建dialog alertDialog.show();//显示dialog
其效果图为:
好了,这篇到这就结束了,下篇给大家详细介绍一些google给我们分装好的一下AlertDialog。
- Dialog(一)------基础应用篇
- 学习Dialog(一)------基础
- J2EE应用部署(一):基础篇
- 详解Dialog(一)——基础元素构建
- linux dialog图形化工具基础应用
- Dialog总结(一)
- Dialog在android中的应用(一)
- Extraction应用构建平台应用基础(一)------应用流程篇
- 用docker搭建全栈式应用(一)基础篇
- Python基础篇—Pandas应用(一)
- zigbee基础应用(一)流水灯
- DOM基础及应用(一)
- iOS应用开发基础(一)基础知识
- GridView基础应用一
- JavaWeb应用基础一
- RAC学习应用篇--基础应用篇(一)--简单常用场景
- WIN32用户界面设计基础之Dialog 篇
- 安卓基础(二),Dialog
- scala字符串变量替换
- 机器人塔
- *线段树(区间修改)
- 科研机构分析环境搭建
- 数据库还原
- Dialog(一)------基础应用篇
- 搭积木
- poj 2396 Budget 解题报告
- 复习
- mysql 创建索引和删除索引
- shell脚本将text文件中的文件名筛选转化成独立的文件
- opencv读取视频
- postfix邮件管理
- java面试题