Dialog 使用方法详解
来源:互联网 发布:dd linux命令复制磁盘 编辑:程序博客网 时间:2024/06/16 05:10
Dialog 是Android 常用控件之一,主要以弹出框的形式与用户进行交互。对话框是提示用户作出决定或输入额外信息的小窗口。 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
通过本章学习可以快速掌握Dialog的使用方法。主要涉及的知识点如下:我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
- 简单对话框
- 多选按钮对话框
- 单选按钮对话框
- 列表对话框
- 水平进度条对话框
- 圆形进度条对话框
- 自定义图文对话框
- 自定义输入对话框
- 自定义样式对话框
- 自定义Loading样式对话框
- 继承 DialogFragment 实现对话框
- Activity形式的 对话框
Dialog 继承关系如下:
java.lang.Object ↳ android.app.Dialog
Dialog 基本样式解析
1.标题
这是可选项,只应在内容区域被详细消息、列表或自定义布局占据时使用。 如需陈述的是一条简单消息或问题(如图 1 中的对话框),则不需要标题。
2.内容区域
它可以显示消息、列表或其他自定义布局。
3.操作按钮
对话框中的操作按钮不应超过三个。
1. 简单对话框
实现效果:
实现代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.gril).setTitle("简单对话框") .setMessage("设置Dialog 显示的内容") .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DiaLogMethods.this, "点击了确定按钮", Toast.LENGTH_SHORT).show(); } }).setNegativeButton("Cancle", null).create().show();
2. 多选按钮对话框
- 实现效果:
- 实现代码:
final String font[] = { "小号字体", "中号字体", "大号字体", "超大号字体" }; final boolean[] MultiChoice = new boolean[] { false, true, false, false }; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("多选对话框") .setIcon(R.drawable.ic_launcher) .setMultiChoiceItems(font, MultiChoice, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { MultiChoice[which] = isChecked; String choiceString = ""; for (int i = 0; i < MultiChoice.length; i++) { if (MultiChoice[i]) { choiceString = choiceString + font[i] + " "; } } if (choiceString.equals("") || choiceString.length() == 0) { // 都不选的处理方法 Toast.makeText(DiaLogMethods.this, "请选择一个内容", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText(DiaLogMethods.this, "选择的字体为" + choiceString, Toast.LENGTH_SHORT).show(); } } }).setPositiveButton("OK", null) .setNegativeButton("Cancle", null).create().show();
3.单选按钮对话框
- 实现效果:
- 实现代码如下:
final String font[] = { "小号字体", "中号字体", "大号字体", "超大号字体" }; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("单选对话框") .setIcon(R.drawable.ic_launcher) .setSingleChoiceItems(font, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DiaLogMethods.this, "选择的字体为:" + font[which], Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }).setPositiveButton("OK", null) .setNegativeButton("Cancle", null).create().show();
4. 列表对话框
- 实现效果如下:
- 实现代码如下:
final String font[] = { "小号字体", "中号字体", "大号字体", "超大号字体" }; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setIcon(R.drawable.ic_launcher) .setTitle(" 列表对话框") .setItems(font, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DiaLogMethods.this, "选择内容是:" + font[which], Toast.LENGTH_SHORT) .show(); } }).setNegativeButton("Cancle", null) .setPositiveButton("OK", null).create().show();
5. 水平进度条对话框
- 实现效果如下:
- 实现代码如下:
final ProgressDialog progressDialog = new ProgressDialog( DiaLogMethods.this); progressDialog.setTitle("进度对话框"); progressDialog.setIcon(R.drawable.ic_launcher); progressDialog.setMessage("加载中..."); // 水平进度条显示 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 圆形进度条显示 // progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setCancelable(true); progressDialog.setButton("Cancle", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DiaLogMethods.this, "取消进度条对话框", Toast.LENGTH_LONG).show(); progressDialog.cancel(); count = 0; } }); progressDialog.setMax(100); progressDialog.show(); count = 0; new Thread() { @Override public void run() { while (count <= 100) { progressDialog.setProgress(count++); try { Thread.sleep(50); } catch (InterruptedException e) { progressDialog.dismiss(); e.printStackTrace(); } } progressDialog.dismiss(); } }.start();
6. 圆形进度条对话框
- 实现效果如下:
- 实现代码如下:
final ProgressDialog progressDialog = new ProgressDialog( DiaLogMethods.this); progressDialog.setTitle("进度对话框"); progressDialog.setIcon(R.drawable.ic_launcher); progressDialog.setMessage("加载中..."); // 水平进度条显示 // progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 圆形进度条显示 progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); progressDialog.setCancelable(true); progressDialog.setButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DiaLogMethods.this, "取消进度条对话框", Toast.LENGTH_LONG).show(); progressDialog.cancel(); count = 0; } }); progressDialog.setMax(100); progressDialog.show(); count = 0; new Thread() { @Override public void run() { while (count <= 100) { progressDialog.setProgress(count++); try { Thread.sleep(50); } catch (InterruptedException e) { progressDialog.dismiss(); e.printStackTrace(); } } progressDialog.dismiss(); } }.start();
注意 :
水平进度条,圆形进度条的区别 如下:
// 水平进度条显示
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 圆形进度条显示 progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
7. 自定义图文对话框
- 实现效果如下:
- 实现代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(this); View contextview = getLayoutInflater().inflate( R.layout.dialog_customt_img_tv, null); LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.linlout1); LinearLayout linearLayout2 = (LinearLayout) findViewById(R.id.linlout2); ImageView img1 = (ImageView) contextview.findViewById(R.id.img1); TextView tv1 = (TextView) contextview.findViewById(R.id.tv1); // 这里可以处理一些点击事件 builder.setIcon(R.drawable.gril).setTitle("自定义对话框") .setView(contextview) // 或者在这里处理一些事件 .setPositiveButton("OK", null) .setNegativeButton("Cancle", null).create().show();
注意: 1. 自定义图文对话框的布局如下:
<?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="horizontal"> <ImageView android:id="@+id/img2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1" android:text="自定义Dialog" android:textColor="@android:color/black" android:textSize="25sp" /></LinearLayout>
8. 自定义输入对话框
实现效果如下:
- 实现代码如下:
AlertDialog.Builder builder = new AlertDialog.Builder(this); View Tittleview = getLayoutInflater().inflate( R.layout.dialog_custom_layout, null); ImageView img2 = (ImageView) Tittleview.findViewById(R.id.img2); TextView textView = (TextView) Tittleview.findViewById(R.id.tv2); textView.setText("自定义对话框"); img2.setImageResource(R.drawable.ic_launcher); // 自定义tittle builder.setCustomTitle(Tittleview); View contentView = getLayoutInflater().inflate( R.layout.dialog_custom_et, null); EditText username = (EditText) contentView.findViewById(R.id.username); EditText passworld = (EditText) contentView .findViewById(R.id.passworld); builder.setView(contentView); builder.setPositiveButton("OK", null).setNegativeButton("Cancle", null) .create().show();
注意 : 自定义对话框 布局如下:
<?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="horizontal"> <ImageView android:id="@+id/img2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="1" android:text="自定义Dialog" android:textColor="@android:color/black" android:textSize="25sp" /></LinearLayout>
9. 自定义样式对话框
- 实现效果如下:
- 实现代码如下:
// 对话框和activity绑定,所以必须传递activity对象 Builder builder = new AlertDialog.Builder(this); // 获取对话框对象 final AlertDialog dialog = builder.create(); // 修改对话框的样式(布局结构) View view = View.inflate(this, R.layout.dialog_custom_style, null); // 因为在2.3.3版本上,系统默认设置内间距,所以需要去除此内间距 // dialog.setView(view); dialog.setView(view, 0, 0, 0, 0); // 找到对话框中所有控件 Button bt_submit = (Button) view.findViewById(R.id.bt_submit); Button bt_cancel = (Button) view.findViewById(R.id.bt_cancel); final EditText et_set_psd = (EditText) view .findViewById(R.id.et_set_psd); final EditText et_confirm_psd = (EditText) view .findViewById(R.id.et_confirm_psd); bt_submit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 如果用户没有输入两次密码,告知用户输入密码 String psd = et_set_psd.getText().toString().trim(); String confirmPsd = et_confirm_psd.getText().toString().trim(); if (!TextUtils.isEmpty(psd) && !TextUtils.isEmpty(confirmPsd)) { if (psd.equals(confirmPsd)) { // 当前的对话框隐藏 dialog.dismiss(); } else { Toast.makeText(getApplicationContext(), "两次输入密码不一致", Toast.LENGTH_SHORT).show(); } } else { Toast.makeText(getApplicationContext(), "密码不能为空", Toast.LENGTH_SHORT).show(); } } }); bt_cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); // 展示对话框 dialog.show();
注意: 1. 自定义样式布局如下:
<?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:background="#fff" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/holo_blue_light" android:gravity="center" android:textColor="@android:color/white" android:layout_marginBottom="10dp" android:padding="10dp" android:text="设置密码" android:textSize="20sp" /> <EditText android:id="@+id/et_set_psd" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="2dp" android:background="@drawable/edittext_background" android:hint="输入密码" android:inputType="textPassword" android:padding="5dp" android:textSize="22sp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginBottom="2dp" android:layout_marginTop="2dp" android:background="@drawable/tittle_bg" /> <EditText android:id="@+id/et_confirm_psd" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="2dp" android:background="@drawable/edittext_background" android:hint="确认密码" android:inputType="textPassword" android:padding="5dp" android:textSize="22sp" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="5dp" android:background="@drawable/tittle_bg" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="3dp" android:layout_marginTop="3dp" android:orientation="horizontal" > <Button android:id="@+id/bt_submit" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="5dp" android:layout_weight="1" android:background="@drawable/selector_btn_normal" android:text="确认" > </Button> <Button android:id="@+id/bt_cancel" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="5dp" android:layout_weight="1" android:background="@drawable/selector_btn_normal" android:text="取消" > </Button> </LinearLayout></LinearLayout>
注意 : 2 EditText 的背景是画的圆角矩形
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <!-- 圆角--> <corners android:radius="5dp" /> <!--描边--> <stroke android:width="1dp" android:color="@color/grey" /></shape>
10. 自定义Loading样式对话框
- 实现效果如下:
- 实现代码如下:
LayoutInflater inflater = LayoutInflater.from(this); View v = inflater.inflate(R.layout.dialog_custom_style_progress, null); LinearLayout layout = (LinearLayout) v.findViewById(R.id.dialog_view); ImageView spaceshipImage = (ImageView) v.findViewById(R.id.img); TextView tipTextView = (TextView) v.findViewById(R.id.tipTextView); Animation hyperspaceJumpAnimation = AnimationUtils.loadAnimation(this, R.anim.loading_animation); spaceshipImage.startAnimation(hyperspaceJumpAnimation); Dialog loadingDialog = new Dialog(this, R.style.loading_dialog); // loadingDialog.setCancelable(true);//“返回键”取消 不可以用 loadingDialog.setContentView(layout, new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); loadingDialog.show();
注意:1. 自定义样式如下:
> <!-- 自定义loading dialog样式 --> <style name="loading_dialog" parent="android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/loading_bg</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
注意:2. 自定义样式动画如下:
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false" > <!-- 自定义旋转的动画 --> <rotate android:duration="800" android:fromDegrees="0" android:interpolator="@android:anim/linear_interpolator" android:pivotX="50%" android:pivotY="50%" android:repeatCount="-1" android:repeatMode="restart" android:startOffset="-1" android:toDegrees="+360" /></set>
注意 3. 自定义样式的布局如下:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dialog_view" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/loading_bg" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="20dp" android:gravity="center_horizontal" android:src="@drawable/loading" /> <TextView android:id="@+id/tipTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginBottom="20dp" android:layout_marginTop="10dp" android:gravity="center_horizontal" android:text="loading..." android:textColor="@android:color/holo_green_light" android:textSize="20sp" /></LinearLayout>
11. 继承 DialogFragment 实现对话框
- 实现效果如下:
- 实现代码如下:
1.自定义继承DialogFragment 类
public class CustomDialogFragment extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("通过 DialogFragment 创建对话框") .setTitle("DialogFragment") .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { Toast.makeText(getActivity(), "点击 OK", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("cancle", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog } }); // Create the AlertDialog object and return it return builder.create(); }}
- Activity 调用显示Dialog方法
CustomDialogFragment customDialogFragment=new CustomDialogFragment(); customDialogFragment.show(getFragmentManager(), "fragment");
12. Activity形式的 对话框
只需创建一个 Activity,并在 <activity> 清单文件元素中将其主题设置为 Theme.Holo.Dialog:
<activity android:theme="@android:style/Theme.Holo.Dialog" >
至此,Dialog 相关的知识点已结束。
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
点击阅读原文,获取更多福利
欢迎关注微信公众号:程序员Android
公众号ID:ProgramAndroid
获取更多信息
我们不是牛逼的程序员,我们只是程序开发中的垫脚石。
我们不发送红包,我们只是红包的搬运工。
- Dialog 使用方法详解
- QT dialog一种使用方法
- Dialog 基础的使用方法
- Dialog详解
- Dialog详解
- Dialog详解
- Dialog详解
- Dialog详解
- Android--Dialog,Dialog 的几种使用方法
- android中dialog(自定义dialog)的使用方法!!!
- android中Dialog的使用方法
- Android Dialog的使用方法总结
- Dialog中Gallery的使用方法
- Android-- Dialog对话框的使用方法
- jQueryUI的dialog的使用方法
- Android笔记:Dialog使用方法总结
- Jquery UI dialog 详解
- Android Dialog 详解
- mybatis_study03
- nodeJs之准备工作
- 网络框架okHttp源码分析
- HDU 4436 str2int
- TypeScript入门知识三(表达式和循环)
- Dialog 使用方法详解
- 排序算法小结
- Python中is和==的具体解释
- Roads in the North POJ
- hdoj 5974 A Simple Math Problem
- SVN的安装与常用功能使用以及解决安装配置过程中的一些错误
- 自定义加载 PopupWindow
- Java面试笔试指南(三)---关键字
- 优化