【攻克Android (14)】Dialog 对话框

[b][size=large]本文围绕以下两个部分展开: [/size][/b]

[b][size=large]一、一个案例[/size][/b]
[size=medium]1、主界面[/size]
[size=medium]2、对话框[/size]
[size=medium]3、列表对话框[/size]
[size=medium]4、单选对话框[/size]
[size=medium]5、多选对话框[/size]
[size=medium]6、自定义对话框[/size]

[b][size=large]附 代码补充[/size][/b]


[b][size=large]一、一个案例[/size][/b]

[size=medium][b]1、主界面[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6088/5cc07996-2a6e-32c5-a693-9650d4b71c52.png[/img][/align]

[size=medium]activity_main.xml :[/size]

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">

<Button
android:id="@+id/btnAlertDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="@string/btn_alert_dialog"/>

<Button
android:id="@+id/btnListAlertDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnAlertDialog"
android:onClick="onClick"
android:text="@string/btn_list_alert_dialog"/>

<Button
android:id="@+id/btnSingleListAlertDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnListAlertDialog"
android:onClick="onClick"
android:text="@string/btn_single_list_alert_dialog"/>

<Button
android:id="@+id/btnMultiListAlertDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnSingleListAlertDialog"
android:onClick="onClick"
android:text="@string/btn_multi_list_alert_dialog"/>

<Button
android:id="@+id/btnCustomDialog"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnMultiListAlertDialog"
android:onClick="onClick"
android:text="@string/btn_custom_dialog"/>

</RelativeLayout>


[size=medium][b]2、对话框[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6090/8e7eb2dd-1293-3f24-9d81-253be16a2f1e.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6082/bb2538f9-07f5-39ef-b81b-aad045bd6250.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6084/6b982856-d127-3dd6-a97e-9e3ff2e52724.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6086/6493f5a7-6eb6-31ee-99d9-8c701b912cda.png[/img][/align]

 private void alertDialog() {  
// Builder 模式:建造者模式
// AlertDialog 的构造方法【受保护】,使用 Builder 创建对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置对话框的图标 / 标题 / 内容
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.app_name));
builder.setMessage("夜深了~~~");

// 不可取消【默认 true】
builder.setCancelable(false);

// 设置按钮:确定、取消、中立【显示的位置固定】
builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast("OK Button.");
}
});
builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast("Cancel Button.");
}
});
builder.setNeutralButton(R.string.button_neutral, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast("Neutral Button.");
}
});

// 创建对话框
AlertDialog dialog = builder.create();
dialog.show();
}


[size=medium][b]3、列表对话框[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6093/c2002a8d-fc2e-3145-bed8-c6c956b8f3ff.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6095/4f1b95eb-9d7e-30d6-b05e-f3d23b38c4de.png[/img][/align]

 private void listAlertDialog() {  
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置对话框的图标 / 标题
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_list_alert_dialog));

// 参数一:数据
// 参数二:选项的事件
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击哪个选项就显示此选项 (which - 字符串数组的下标)
showToast(items[which]);
}
});

// 设置 取消 按钮,无监听事件
builder.setNegativeButton(R.string.button_cancel, null);

AlertDialog dialog = builder.create();
dialog.show();
}


[size=medium][b]4、单选对话框[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6097/ed5f3dfc-1ffa-368c-bc63-8ec7cc510cf0.png[/img][/align]

 private void singleListAlertDialog() {  
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_single_list_alert_dialog));

// 参数一:列表中的数据集
// 参数二:默认选中的位置,-1 无默认选中项
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击哪个选项就显示此选项 (which - 字符串数组的下标)
showToast(items[which]);
}
});
builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, null);

AlertDialog dialog = builder.create();
dialog.show();
}


[size=medium][b]5、多选对话框[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6099/e40f93bb-1b3e-3ed8-ac14-bddb1355c1cf.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6101/a713094e-7597-359f-ad88-ca26a39b0fcd.png[/img][/align]

 private void multiListAlertDialog() {  
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_multi_list_alert_dialog));

builder.setCancelable(false);
final boolean[] checkedItems = new boolean[items.length];

// 参数一:列表中的数据集
// 参数二:列表中各项的状态(true 为选中、false 为未选中)
// 参数三:多选监听器
builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedItems[which] = isChecked;
}
});

builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String text = "";

for (int i = 0; i < items.length; i++) {
if (checkedItems[i]) {
text += items[i] + ",";
}
}
if (text.length() > 0) {
text = text.substring(0, text.length() - 1);
} else {
text = "你还没有选呢~";
}
showToast(text + "\n" + Arrays.toString(checkedItems));
}
});

AlertDialog dialog = builder.create();
dialog.show();
}


[size=medium][b]6、自定义对话框[/b][/size]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6103/aa803c66-6a88-3d8c-8afe-3f8005f865b6.png[/img][/align]

[align=center][img]http://dl2.iteye.com/upload/attachment/0110/6107/be762fb5-b026-3029-bbcc-dd40de28aada.png[/img][/align]

[size=medium](1)dialog_custom.xml :[/size]

 <?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="vertical"
android:padding="@dimen/activity_horizontal_margin">

<EditText
android:id="@+id/txtName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_name"/>

<EditText
android:id="@+id/txtPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_password"
android:inputType="textPassword"/>
</LinearLayout>


[size=medium](2)[/size]

 private void customDialog() {  
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_custom_dialog));

// 使用指定布局文件填充视图
View view = this.getLayoutInflater().inflate(
R.layout.dialog_custom, null);
txtName = (EditText) view.findViewById(R.id.txtName);
txtPassword = (EditText) view.findViewById(R.id.txtPassword);

// 设置对话框的视图
builder.setView(view);

builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = txtName.getText().toString();
String password = txtPassword.getText().toString();
showToast(name + "\n" + password);
}
});

AlertDialog dialog = builder.create();
dialog.show();
}



[b][size=large]附 代码补充[/size][/b]

[size=medium][b]1. styles.xml(v21) :[/b][/size]

 <?xml version="1.0" encoding="utf-8"?>  
<resources>

<style name="AppTheme" parent="android:Theme.Material.Light">
<item name="android:colorPrimaryDark">@android:color/holo_blue_dark</item>
<item name="android:colorPrimary">@android:color/holo_blue_light</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
</style>
</resources>


[size=medium][b]2. strings.xml :[/b][/size]

 <resources>  
<string name="app_name">Dialog</string>

<string name="action_settings">Settings</string>

<string name="btn_alert_dialog">对话框</string>
<string name="btn_list_alert_dialog">列表对话框</string>
<string name="btn_single_list_alert_dialog">单选列表对话框</string>
<string name="btn_multi_list_alert_dialog">多选列表对话框</string>
<string name="btn_custom_dialog">自定义对话框</string>

<string name="button_ok">确定</string>
<string name="button_cancel">取消</string>
<string name="button_neutral">了解更多</string>

<string name="hint_name">网络名</string>
<string name="hint_password">密码</string>

<string-array name="skills">
<item>Android</item>
<item>iOS</item>
<item>Windows</item>
<item>Web</item>
<item>C/C++</item>
</string-array>
</resources>


[size=medium][b]3. MainActivity :[/b][/size]

 package com.android.dialog;  

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Arrays;

public class MainActivity extends Activity {
private String[] items;

private EditText txtName;
private EditText txtPassword;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

// 通过读取资源文件 strings.xml 获得指定的字符串数组
items = this.getResources().getStringArray(R.array.skills);
}

public void onClick(View view) {
switch (view.getId()) {
case R.id.btnAlertDialog:
alertDialog();
break;
case R.id.btnListAlertDialog:
listAlertDialog();
break;
case R.id.btnSingleListAlertDialog:
singleListAlertDialog();
break;
case R.id.btnMultiListAlertDialog:
multiListAlertDialog();
break;
case R.id.btnCustomDialog:
customDialog();
break;
}
}

private void customDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_custom_dialog));

// 使用指定布局文件填充视图
View view = this.getLayoutInflater().inflate(
R.layout.dialog_custom, null);
txtName = (EditText) view.findViewById(R.id.txtName);
txtPassword = (EditText) view.findViewById(R.id.txtPassword);

// 设置对话框的视图
builder.setView(view);

builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String name = txtName.getText().toString();
String password = txtPassword.getText().toString();
showToast(name + "\n" + password);
}
});

AlertDialog dialog = builder.create();
dialog.show();
}

private void multiListAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_multi_list_alert_dialog));

builder.setCancelable(false);
final boolean[] checkedItems = new boolean[items.length];

// 参数一:列表中的数据集
// 参数二:列表中各项的状态(true 为选中、false 为未选中)
// 参数三:多选监听器
builder.setMultiChoiceItems(items, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedItems[which] = isChecked;
}
});

builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String text = "";

for (int i = 0; i < items.length; i++) {
if (checkedItems[i]) {
text += items[i] + ",";
}
}
if (text.length() > 0) {
text = text.substring(0, text.length() - 1);
} else {
text = "你还没有选呢~";
}
showToast(text + "\n" + Arrays.toString(checkedItems));
}
});

AlertDialog dialog = builder.create();
dialog.show();
}

private void singleListAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_single_list_alert_dialog));

// 参数一:列表中的数据集
// 参数二:默认选中的位置,-1 无默认选中项
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击哪个选项就显示此选项 (which - 字符串数组的下标)
showToast(items[which]);
}
});
builder.setNegativeButton(R.string.button_cancel, null);
builder.setPositiveButton(R.string.button_ok, null);

AlertDialog dialog = builder.create();
dialog.show();
}

private void listAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置对话框的图标 / 标题 / 内容
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.btn_list_alert_dialog));

// 参数一:数据
// 参数二:选项的事件
builder.setItems(items, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击哪个选项就显示此选项 (which - 字符串数组的下标)
showToast(items[which]);
}
});

// 设置 取消 按钮,无监听事件
builder.setNegativeButton(R.string.button_cancel, null);

AlertDialog dialog = builder.create();
dialog.show();
}

private void alertDialog() {
// Builder 模式:建造者模式
// AlertDialog 的构造方法【受保护】,使用 Builder 创建对话框
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置对话框的图标 / 标题 / 内容
builder.setIcon(R.mipmap.ic_launcher);
builder.setTitle(getString(R.string.app_name));
builder.setMessage("夜深了~~~");

// 不可取消【默认 true】
builder.setCancelable(false);

// 设置按钮:确定、取消、中立【显示的位置固定】
builder.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast("OK Button.");
}
});
builder.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast("Cancel Button.");
}
});
builder.setNeutralButton(R.string.button_neutral, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
showToast("Neutral Button.");
}
});

// 创建对话框
AlertDialog dialog = builder.create();
dialog.show();
}

private void showToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
超炫Dialog对话框是一种专为手机应用程序设计的界面元素,其设计风格炫目而富有创意。它具有以下几个特点: 首先,超炫Dialog对话框具有丰富多彩的样式和动画效果。通过使用各种鲜艳的颜色和精心设计的动态效果,该对话框能够吸引用户的眼球,增加界面的活力和吸引力。 其次,超炫Dialog对话框提供了多种交互方式。它可以响应不同的用户操作,如点击、滑动、拖动等,从而为用户提供更加自由和灵活的交互体验。此外,该对话框还支持手势识别和语音控制等高级交互功能,进一步提升用户的操作便捷性。 再次,超炫Dialog对话框具备强大的功能和扩展性。它可以用于展示各种类型的信息,如文字、图片、音视频等,并可以根据需要灵活地扩展功能。无论是提示、确认、警告还是错误信息,该对话框都能够满足不同场景的需求。 最后,超炫Dialog对话框还具备良好的兼容性和适配性。它可以适配不同尺寸和分辨率的屏幕,保证在不同设备上都能够正常显示和使用。此外,该对话框还兼容不同的操作系统和平台,如Android、iOS等,使得开发者能够在多个平台上灵活使用。 综上所述,超炫Dialog对话框以其炫目、多彩、交互丰富、功能强大、兼容性强等特点,成为了手机应用程序中不可或缺的重要元素,为用户提供了更加优秀的交互和使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值