AlertDialog的简单使用
AlertDialog的使用是依赖于Activity的。它不同于Toast,Toast是不依赖于Activity的,Toast只起到一种提示作用,并无法进行交互。而AlertDialog是可以进行交互的,不仅可以起到提示作用,还可以用来进行选择等,下面我们来看看它的用法。
我们通过一个按键的点击来触发AlertDialog:
//首先创建一个AlertDialog.Builder的对象。
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
//设置图片
builder.setIcon(R.mipmap.ic_launcher);
//设置题目
builder.setTitle("Title");
//设置内容
builder.setMessage("This is a Dialog!");
//设置按键NegativeButton(在最左边)
builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), "NegativeButton", Toast.LENGTH_SHORT).show();
}
});
//设置按键NeutralButton(在中间)
builder.setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), "NeutralButton", Toast.LENGTH_SHORT).show();
}
});
//设置按键PositiveButton(在最右边)
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), "PositiveButton", Toast.LENGTH_SHORT).show();
}
});
//创建AlertDialog 对象。
AlertDialog dialog =builder.create();
//调用show()方法显示。
dialog.show();
选择型的AlertDialog
通过弹出AlertDialog,在AlertDialog中选择想要的内容,点击后直接退出AlertDialog。
//首先创建一个AlertDialog.Builder的对象。
AlertDialog.Builder builder =new AlertDialog.Builder(DialogActivity.this);
//设置题目
builder.setTitle("Title");
//设置选择的内容:第一个参数是数据, 第二个参数是点击事件。
builder.setItems(mData, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getApplicationContext(), "点击第" + (i + 1) + "数据", Toast.LENGTH_SHORT).show();
}
});
AlertDialog dialog =builder.create();
dialog.show();
数据设置为:
private String[] mData={"This is Item1", "This is Item2", "This is Item3", "This is Item4"};
单选择的AlertDialog
通过弹出AlertDialog,在AlertDialog中选择想要的内容,点击定义的NegativeButton,NeutralButton或者PositiveButton按钮后退出,我们可以通过在NeutralButton或者PositiveButton按钮中定义相关操作提交数据,NegativeButton则是不对数据做处理直接退出。注意:单选择的AlertDialog只能选择一项。
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("Title");
//设置单选则的选项
builder.setSingleChoiceItems(mSexs, 0, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
mSex = mSexs[which];
Toast.makeText(getApplicationContext(), "您选择的性别是" + mSexs[which], Toast.LENGTH_SHORT).show();
}
});
//取消按钮,点击后不对数据做处理。
builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
//确定按钮,点击后将数据显示在EditText中。
builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
mEditTextSex.setText(mSex);
}
});
builder.show();
补充数据定义:
private String[] mSexs={"男", "女", "其他"};
private String mSex;
多选择的AlertDialog
通过弹出AlertDialog,在AlertDialog中选择想要的内容,点击定义的NegativeButton,NeutralButton或者PositiveButton按钮后退出,我们可以通过在NeutralButton或者PositiveButton按钮中定义相关操作提交数据,NegativeButton则是不对数据做处理直接退出。注意:多选择的AlertDialog可以选择多项。
AlertDialog.Builder builder = new AlertDialog.Builder(DialogActivity.this);
builder.setTitle("Title");
//设置多选择项。
builder.setMultiChoiceItems(mHobby, mIsCheckedManager, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which, boolean isChecked) {
mIsCheckedManager[which] = isChecked;
}
});
builder.setNegativeButton("Cancle", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which) {
hobby = new StringBuffer();
for (int i=0; i<mHobby.length; i++){
if(mIsCheckedManager[i]){
hobby.append(mHobby[i]);
}
}
mEditTextHobby.setText(hobby);
}
});
builder.show();
补充数据定义:
private String[] mHobby={"唱歌", "学习", "读书", "打篮球", "跑步", "运动"};
private boolean[] mIsCheckedManager=new boolean[mHobby.length];
private StringBuffer hobby;
自定义AlertDialog
- 首先定义一个自定义的Dialog的布局。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/dialog_background"
android:orientation="vertical">
<Button
android:id="@+id/button_cancle"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:background="@drawable/btn_background"
android:gravity="left"
android:padding="10dp"
android:text="取消" />
<Button
android:id="@+id/button_save"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_background"
android:gravity="left"
android:padding="10dp"
android:text="收藏" />
<Button
android:id="@+id/button_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_background"
android:gravity="left"
android:padding="10dp"
android:text="删除" />
</LinearLayout>
布局结果如下:
- 创建Dialog对象,将布局添加到Dialog中。
//定义了一个全局变量,方便使用
private Dialog mMyDialog;
//自定义的Dialog;
mMyDialog = new Dialog(DialogActivity.this);
LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.layout_my_dialog, null);
//将布局添加到Dialog中。
mMyDialog.setContentView(dialogView);
mMyDialog.show();
//设置三个按钮的作用
Button button_cancle = (Button) dialogView.findViewById(R.id.button_cancle);
Button button_save = (Button) dialogView.findViewById(R.id.button_save);
Button button_delete = (Button) dialogView.findViewById(R.id.button_delete);
//设置取消按钮
button_cancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mMyDialog.dismiss();
}
});
//设置收藏按钮
button_save.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), "收藏成功", Toast.LENGTH_LONG).show();
mMyDialog.dismiss();
}
});
//设置删除按钮
button_delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(getApplicationContext(), "删除成功", Toast.LENGTH_LONG).show();
mMyDialog.dismiss();
}
});
结果:
可是我们可以看到我们自定义的Dialog中还是包括标题栏,那么我们应该如何去除标题呢?
方法一:我们可以通过添加语句:
//去除标题栏
mMyDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
方法二:我们可以通过定义一个Style:
<style parent="@android:Theme.Dialog" name="NoDialogTitle">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
在创建Dialog对象时调用:
//自定义的Dialog;
mMyDialog = new Dialog(DialogActivity.this,R.style.NoDialogTitle);