Android系统对话框使用详解(最详细)

在实际应用开发中,用到系统对话框中的情况几乎是没有的。按开发流程来说,UI工程师都会给出每一个弹窗的样式,故而在实际开发中都是自定义弹窗的。

即使用到的地方不多,但是我们也是需要了解并且能熟练的运用它,下面为大家奉上各种系统对话框的实现。

目录

一、系统对话框的几种类型与实现

在项目的实际开发中,用到的系统对话框几乎是没有的。原因大概包含以下几点:

样式过于单一,不能满足大部分实际项目中的需求。

对话框的样式会根据手机系统版本的不同而变化。不能达到统一的样式。

能实现的功能过于简单。

在这里先附上下面代码中出现文本的string.xml文件。

<string name="dialog_normal_content">我是普通dialog</string> <string name="dialog_normal_more_button_content">我是普通多按钮dialog</string> <string name="dialog_btn_confirm_text">确定</string> <string name="dialog_btn_cancel_text">取消</string> <string name="dialog_btn_neutral_text">忽略</string> <string name="dialog_btn_confirm_hint_text">您点击了确定按钮</string> <string name="dialog_btn_cancel_hint_text">您点击了取消按钮</string> <string name="dialog_btn_neutral_hint_text">您点击了忽略按钮</string>

1、普通对话框

在实际项目开发中,此类型对话框中用到的地方要比其他类型的对话框多一些。但是考虑UI统一问题,也会很少用。

运行截图:

代码:

private void showNormalDialog(){ //创建dialog构造器 AlertDialog.Builder normalDialog = new AlertDialog.Builder(this); //设置title normalDialog.setTitle(getString(R.string.dialog_normal_text)); //设置icon normalDialog.setIcon(R.mipmap.ic_launcher_round); //设置内容 normalDialog.setMessage(getString(R.string.dialog_normal_content)); //设置按钮 normalDialog.setPositiveButton(getString(R.string.dialog_btn_confirm_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this,getString(R.string.dialog_btn_confirm_hint_text) ,Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); //创建并显示 normalDialog.create().show(); }

系统对话框都是支持链式调用的,举例:

new AlertDialog.Builder(this) .setTitle(getString(R.string.dialog_normal_text)) .setIcon(R.mipmap.ic_launcher_round) .setMessage(getString(R.string.dialog_normal_content)) .setPositiveButton(getString(R.string.dialog_btn_confirm_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this,getString(R.string.dialog_btn_confirm_hint_text) ,Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }) .create() .show();

下面的代码都是可以用链式调用的,这里就不展示了。

2、普通对话框(多按钮)

在系统对话框中最多出现三个按钮,即PositiveButton(确定)、NegativeButton(取消)、NeutralButton(忽略)。

运行截图:

代码:

private void showNormalMoreButtonDialog(){ AlertDialog.Builder normalMoreButtonDialog = new AlertDialog.Builder(this); normalMoreButtonDialog.setTitle(getString(R.string.dialog_normal_more_button_text)); normalMoreButtonDialog.setIcon(R.mipmap.ic_launcher_round); normalMoreButtonDialog.setMessage(getString(R.string.dialog_normal_more_button_content)); //设置按钮 normalMoreButtonDialog.setPositiveButton(getString(R.string.dialog_btn_confirm_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this ,getString(R.string.dialog_btn_confirm_hint_text),Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); normalMoreButtonDialog.setNegativeButton(getString(R.string.dialog_btn_cancel_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this, getString(R.string.dialog_btn_cancel_hint_text),Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); normalMoreButtonDialog.setNeutralButton(getString(R.string.dialog_btn_neutral_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this, getString(R.string.dialog_btn_neutral_hint_text),Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); normalMoreButtonDialog.create().show(); }

也可以用下面的实现方式,和上面的代码效果是一样的。

private void showNormalMoreButtonDialog(){ DialogInterface.OnClickListener setListener = null; AlertDialog.Builder normalMoreButtonDialog = new AlertDialog.Builder(this); normalMoreButtonDialog.setTitle(getString(R.string.dialog_normal_more_button_text)); normalMoreButtonDialog.setIcon(R.mipmap.ic_launcher_round); normalMoreButtonDialog.setMessage(getString(R.string.dialog_normal_more_button_content)); setListener = new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which){ case DialogInterface.BUTTON_POSITIVE: Toast.makeText(DialogActivity.this, getString(R.string.dialog_btn_confirm_hint_text),Toast.LENGTH_SHORT).show(); dialog.dismiss(); break; case DialogInterface.BUTTON_NEUTRAL: Toast.makeText(DialogActivity.this ,getString(R.string.dialog_btn_neutral_hint_text),Toast.LENGTH_SHORT).show(); dialog.dismiss(); break; case DialogInterface.BUTTON_NEGATIVE: Toast.makeText(DialogActivity.this ,getString(R.string.dialog_btn_cancel_hint_text),Toast.LENGTH_SHORT).show(); dialog.dismiss(); break; } } }; normalMoreButtonDialog.setPositiveButton(getString(R.string.dialog_btn_confirm_text),setListener); normalMoreButtonDialog.setNegativeButton(getString(R.string.dialog_btn_cancel_text),setListener); normalMoreButtonDialog.setNeutralButton(getString(R.string.dialog_btn_neutral_text),setListener); normalMoreButtonDialog.create().show(); }

3、普通列表对话框

此种类型的对话框能实现简单的列表。

运行截图:

代码:

/** * 普通列表dialog */ private void showListDialog(){ final String listItems[] = new String[]{"listItems1","listItems2","listItems3", "listItems4","listItems5","listItems6"}; AlertDialog.Builder listDialog = new AlertDialog.Builder(this); listDialog.setTitle(getString(R.string.dialog_list_text)); listDialog.setIcon(R.mipmap.ic_launcher_round); /* 设置item 不能用setMessage() 用setItems items : listItems[] -> 列表项数组 listener -> 回调接口 */ listDialog.setItems(listItems,new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this,listItems[which],Toast.LENGTH_SHORT).show(); } }); //设置按钮 listDialog.setPositiveButton(getString(R.string.dialog_btn_confirm_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); listDialog.create().show(); }

4、单选对话框

运行截图:

代码:

private void showRadioDialog(){ final String radioItems[] = new String[]{"radioItem1","radioItem1","radioItem1","radioItem1"}; AlertDialog.Builder radioDialog = new AlertDialog.Builder(this); radioDialog.setTitle(getString(R.string.dialog_radio_text)); radioDialog.setIcon(R.mipmap.ic_launcher_round); /* 设置item 不能用setMessage() 用setSingleChoiceItems items : radioItems[] -> 单选选项数组 checkItem : 0 -> 默认选中的item listener -> 回调接口 */ radioDialog.setSingleChoiceItems(radioItems, 0, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this,radioItems[which],Toast.LENGTH_SHORT).show(); } }); //设置按钮 radioDialog.setPositiveButton(getString(R.string.dialog_btn_confirm_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); radioDialog.create().show(); }

5、多选对话框

运行截图:

代码:

private void showCheckBoxDialog(){ final String checkBoxItems[] = new String[]{"checkBoxItems1","checkBoxItems2", "checkBoxItems3","checkBoxItems4"}; final boolean isCheck[] = new boolean[]{false,true,true,false}; AlertDialog.Builder checkBoxDialog = new AlertDialog.Builder(this); checkBoxDialog.setTitle(getString(R.string.dialog_check_box_text)); checkBoxDialog.setIcon(R.mipmap.ic_launcher_round); /* 设置item 不能用setMessage() 用setMultiChoiceItems items : radioItems[] -> 多选选项数组 checkItems : isCheck[] -> 是否选中数组 listener -> 回调接口 */ checkBoxDialog.setMultiChoiceItems(checkBoxItems, isCheck , new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { if (isChecked){ Toast.makeText(DialogActivity.this, checkBoxItems[which] + " 选中",Toast.LENGTH_SHORT).show(); }else { Toast.makeText(DialogActivity.this, checkBoxItems[which] + " 未选中",Toast.LENGTH_SHORT).show(); } } }); //设置按钮 checkBoxDialog.setPositiveButton(getString(R.string.dialog_btn_confirm_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }); checkBoxDialog.create().show(); }

6、带输入框的弹窗

运行截图:

代码:

private void showEditDialog(){ final EditText edit = new EditText(this); AlertDialog.Builder editDialog = new AlertDialog.Builder(this); editDialog.setTitle(getString(R.string.dialog_edit_text)); editDialog.setIcon(R.mipmap.ic_launcher_round); //设置dialog布局 editDialog.setView(edit); //设置按钮 editDialog.setPositiveButton(getString(R.string.dialog_btn_confirm_text) , new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(DialogActivity.this, edit.getText().toString().trim(),Toast.LENGTH_SHORT).show(); dialog.dismiss(); } }); editDialog.create().show(); }

7、自定义布局的对话框

此类型的对话框在实际项目开发中用到的地方比提示对话框用到的地方要多一些,不过在项目几乎上都是自定义的对话框...

运行截图:

布局文件:custom_dialog_layout.xml

<TextView android:id="@+id/dialog_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="15sp" android:textColor="@color/colorPrimary" android:gravity="center" android:padding="12dp"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher"/> <Button android:id="@+id/dialog_btn_confirm" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/colorAccent" android:textSize="15sp" android:text="@string/dialog_btn_confirm_text" android:layout_centerHorizontal="true"/> <Button android:id="@+id/dialog_btn_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/colorAccent" android:textSize="15sp" android:text="@string/dialog_btn_cancel_text" android:layout_centerHorizontal="true" android:layout_alignParentRight="true"/> </RelativeLayout> </LinearLayout>

代码:

private void showLayoutDialog() { //加载布局并初始化组件 View dialogView = LayoutInflater.from(this).inflate(R.layout.custom_dialog_layout,null); TextView dialogText = (TextView) dialogView.findViewById(R.id.dialog_text); Button dialogBtnConfirm = (Button) dialogView.findViewById(R.id.dialog_btn_confirm); Button dialogBtnCancel = (Button) dialogView.findViewById(R.id.dialog_btn_cancel); final AlertDialog.Builder layoutDialog = new AlertDialog.Builder(this); layoutDialog.setTitle(getString(R.string.dialog_custom_layout_text)); layoutDialog.setIcon(R.mipmap.ic_launcher_round); layoutDialog.setView(dialogView); //设置组件 dialogText.setText("我是自定义layout的弹窗!!"); dialogBtnConfirm .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(DialogActivity.this,"我是自定义layout的弹窗!!",Toast.LENGTH_SHORT).show(); } }); dialogBtnConfirm .setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { layoutDialog.setOnDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { dialog.dismiss(); } }); } }); layoutDialog.create().show(); }

以上就是Android系统弹窗的几种实现方式,几乎涵盖了能解决各种简单需求。其中自定义布局的方式奠定了自定义弹窗的基本实现。

二、总结

可以看出上面的几种实现方式都是通过AlertDialog类实现的。有兴趣的可以看Android源码中的AlertDialog类实现。

以上所述是小编给大家介绍的Android系统对话框使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-09-17 04:11:33

Android系统对话框使用详解(最详细)的相关文章

Android系统Content Provide详解

Content Provider 属于Android应用程序的组件之一,作为应用程序之间唯一的共享数据的途径,Content Provider 主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的借口. Android 系统 为一些常见的数据类型(如音乐.视频.图像.手机通信录联系人信息等)内置了一系列的 Content Provider, 这些都位于android.provider包下.持有特定的许可,可以在自己开发的应用程序中访问这些Content Provider. 让自己的数据和

Android系统五大布局详解Layout

  我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前,视图都是由一个一个的组件构成的.组件就是我们常见的Button.TextEdit等等.那么我们平时看到的Android手机中那些漂亮的界面是怎么显示出来的呢?这就要用到Android的布局管理器了,网上有人比喻的很好:布局好比是建筑里的框架,组件按照布局的要求依次排列,就组成了用于看见的漂亮界面了.      在分析布局之前,我们首先看看控件:Android中任何可视化的控件

Android开发之对话框案例详解(五种对话框)

下面通过实例代码给大家分享5种android对话框,具体内容详情如下所示: 1 弹出普通对话框 --- 系统更新 2 自定义对话框-- 用户登录 3 时间选择对话框 -- 时间对话框 4 进度条对话框 -- 信息加载.. 5 popuWindow对话框 1 弹出普通对话框 --- 系统更新 //弹出普通对话框 public void showNormalDialog(View v) { AlertDialog.Builder builder = new Builder(this); //设置Di

无惊喜有改变 Android 4.1.2系统更新内容详解

Android 4.1.2系统更新内容详解(1)本周谷歌刚刚发布了最新版本的Android 4.1.2系统,我们也在第一时间上手试用并为大家带来了这篇介绍文章.如果你想要知道4.1.2中的新变化那你来对地方了.说实话其实可供介绍的方面并不多,从版本号上仅0.0.1的的变化就可以看出这次并不是一次重大更新.不过我依然仔细遍历了所有164个系统软件,下面就是所有能为大家介绍的内容.首先,可能大家也都听说过了,就是单手指通知栏展开以及终于学会了旋转的桌面.至于那些有关bug修复的更新内容我就无法测试了

《Android NFC开发实战详解》——6.4节Android NFC P2P开发进阶

6.4 Android NFC P2P开发进阶 Android NFC开发实战详解 本节将介绍Android API 16+中引入的针对NFC P2P功能开发的新功能--文件传输进行介绍.该功能包括setBeamPushUrisCallback和setBeamPushUris两个方法.通过本节的介绍,大家可以结合NFC和蓝牙或WiFi很轻松的实现Android设备之间大数据(如图片.音乐等)的传输. 6.4.1 Beam实现文件传输的方法 Android4.1(Jelly Bean,Androi

《Android NFC开发实战详解》——6.2节Android NFC P2P开发基础

6.2 Android NFC P2P开发基础 Android NFC开发实战详解 本节主要介绍Android NFC P2P开发中的一些基础知识,为后续的实例开发提供基础.通过本章的学习,使读者熟悉Android中Beam实现的几种方式,Beam NDEF消息和接收Beam消息的方法,同时也会对第4章中提到的Intent过滤机制在P2P中的使用进行阐述. 6.2.1 Android Beam实现的几种方式 在Android中,目前,Beam功能实现的方式可以概括为三种,分别为setNdefPu

android进程与线程详解

并且已经存在这个应用的线程了(因为有这个应用程序的另一个组件已经运行了),于是这个组件就会在这个已有的进程中启动并且运行在同一个线程中.然而,你完全可以安排不同的组件运行于不同的进程,并且你可以为任何程序创建另外的线程. 进程 默认下,同一个程序的所有组件都运行在同一个进程中并且大多数程序不必改变这一状况.然而,如果你非要与众不同,也可以通过修改manifest文件实现. manifest文件中的所有支持android:process属性的那些项(<activity>,<service&

《Android NFC开发实战详解》——6.3节Android NFC P2P开发实例

6.3 Android NFC P2P开发实例Android NFC开发实战详解学习了Android NFC P2P开发的基础知识后,本节将以程序实例的形式对Android NFC P2P功能进行进一步阐述,其中包括setNdefPushMessageCallback.setNdefPushMessage.enableForeground NdefPush以及结合AAR功能的Beam功能的四个实例开发.通过本节的学习,读者可以根据具体场景实现自己的P2P功能的开发. 6.3.1 实例1:使用se

Linux下Android ADB驱动安装详解

Linux下Android ADB驱动安装详解 概述 最近由于内置的合作商比较多,本人使用的Ubuntu系统好多厂商的Android手机都无法正确的识别,经过一番折腾,和查阅SDK,现把Linux下ADB驱动配置的方法和当中会遇到的相关问题的解决方法整理出来贡献给大家. Linux下使用手机USB调试模式连接ADB进行Android程序的调试,配置驱动没有Windows来的直观. 具体步骤 首先确认手机连接上电脑,lsusb查看下设备记录. matthew@matthew-1230-laptop