本篇文章为大家介绍一些常用的安卓dialog,各种风格都有,相信应该能满足广大读者的需求
第一个是最普通的dialog,弹出一个提示对话框,用户可以选择确定,继续操作,或者点取消,取消操作
private void showDialog() {
AlertDialog.Builder builder = new Builder(MainActivity.this);
builder.setTitle("提示");
builder.setMessage("这是一个普通对话框");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击确认做的操作
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击取消做的操作
dialog.dismiss();
}
});
builder.create().show();
}
第二个展示的是一个列表对话框,用户可以从列表中点击选择需要的内容,我们需要传入一个String类型的数组
private void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("选择一个城市");
// 指定下拉列表的显示数据
final String[] cities = { "广州", "上海", "北京", "香港", "澳门" };
// 设置一个下拉的列表选择项
builder.setItems(cities, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "选择的城市为:" + cities[which], Toast.LENGTH_SHORT).show();
}
});
builder.show();
}
第三个展示的是一个单选列表对话框,本对话框主要方法setSingleChoiceItems,需要传入三个参数,第一个参数String类型数组代表选项,第二个参数为int数字作为默认选中索引,这里要注意数组长度,不能大于数组长度,也不能为负数,否则数组越界,第三个参数给每一个单选项绑定一个监听器
private void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("请选择性别");
final String[] sex = { "男", "女", "未知性别" };
// 设置一个单项选择下拉框
/**
* 第一个参数指定我们要显示的一组下拉单选框的数据集合 第二个参数代表索引,指定默认哪一个单选框被勾选上,1表示默认'女' 会被勾选上
* 第三个参数给每一个单选项绑定一个监听器
*/
builder.setSingleChoiceItems(sex, 1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "性别为:" + sex[which], Toast.LENGTH_SHORT).show();
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
第四个dialog为多选列表对话框,代码如下所示,各项参数含义可以看注释
private void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.ic_launcher);
builder.setTitle("爱好");
final String[] hobbies = { "篮球", "足球", "网球", "斯诺克" };
final boolean[] selectd = {false,true,false,true};
// 设置一个单项选择下拉框
/**
* 第一个参数指定我们要显示的一组下拉多选框的数据集合
* 第二个参数代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
* 需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
* 第三个参数给每一个多选项绑定一个监听器
*/
builder.setMultiChoiceItems(hobbies, selectd, new DialogInterface.OnMultiChoiceClickListener() {
StringBuffer sb = new StringBuffer(100);
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
}
});
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
第五个是一个自定义的对话框,我们可以自己在layout文件下建立一个布局,然后通过LayoutInflater加载布局,将获取到的View通过setView添加到dialog中,我们可以通过findViewById方法获取到dialog中的控件实例来操作dialog,具体使用如下所示,my_dialog为自定义的dialog所要加载的布局
private void showDialog() {
// 通过LayoutInflater来加载一个xml的布局文件作为一个View对象
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.my_dialog, null);
final AlertDialog mDialog = new AlertDialog.Builder(MainActivity.this)
.setView(view).create();
mDialog.setCancelable(true);
final EditText editText = (EditText) view.findViewById(R.id.e_tv);
view.findViewById(R.id.ok).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, editText.getText(), Toast.LENGTH_LONG).show();
mDialog.dismiss();
}
});
view.findViewById(R.id.cancel).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
mDialog.show();
}
<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"
tools:context="com.example.redpoint.MainActivity" >
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginLeft="10dp"
android:textSize="20sp"
android:textColor="@android:color/holo_green_dark"
android:text="这是一个自定义dialog"
/>
<EditText
android:id="@+id/e_tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_below="@id/tv1"
android:hint="请输入内容"
/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="20dp"
android:layout_below="@id/e_tv"
android:layout_alignParentRight="true"
android:orientation="horizontal"
>
<TextView
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="@android:color/holo_orange_dark"
android:text="确认"
/>
<TextView
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:textSize="18sp"
android:textColor="@android:color/holo_orange_dark"
android:text="取消"
/>
</LinearLayout>
</RelativeLayout>
第六个是一个圆形进度条加载对话框,比较简单
private void showDialog() {
ProgressDialog dialog = new ProgressDialog(this);
dialog.setMessage("正在加载中");
dialog.show();
}
第七个是设置一个水平的进度条并显示当前进度,只需要把他的样式设置为ProgressDialog.STYLE_HORIZONTAL即可。
private void showDialog() {
final ProgressDialog dialog = new ProgressDialog(this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMessage("正在加载中");
dialog.setMax(100);
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
int progress = 0;
@Override
public void run() {
dialog.setProgress(progress += 5);
if (progress == 100) {
timer.cancel();
}
}
}, 0, 1000);
dialog.show();
}
下面为大家介绍一下如何设置dialog的样式,分为系统自带的和自定义的,首先来看一下系统自带的,图中的样式和代码中设置的顺序相同
private void showDialog() {
@SuppressWarnings("deprecation")
AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_DEVICE_DEFAULT_DARK);
// AlertDialog.Builder builder = newBuilder(MainActivity.this,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
// AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_HOLO_DARK);
// AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_HOLO_LIGHT);
// AlertDialog.Builder builder = new Builder(MainActivity.this,AlertDialog.THEME_TRADITIONAL);
builder.setTitle("提示");
builder.setMessage("这是一个普通对话框");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击确认做的操作
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击取消做的操作
dialog.dismiss();
}
});
builder.create().show();
}
我们也可以自己为dialog在style文件中定义一个样式,如下
private void showDialog() {
@SuppressWarnings("deprecation")
AlertDialog.Builder builder = new Builder(MainActivity.this,R.style.NormalDialogStyle);
builder.setTitle("提示");
builder.setMessage("这是一个普通对话框");
builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击确认做的操作
dialog.dismiss();
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//点击取消做的操作
dialog.dismiss();
}
});
builder.create().show();
}
<!--对话框的样式-->
<style name="NormalDialogStyle">
<!--对话框背景 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!--边框 -->
<item name="android:windowFrame">@null</item>
<!--没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 是否浮现在Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!--背景透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 是否有覆盖 -->
<item name="android:windowContentOverlay">@null</item>
<!--背景变暗-->
<item name="android:backgroundDimEnabled">true</item>
</style>