AlertDialog 使用
這篇文章將介紹一些 AlertDialog 常用的樣式,修改按鈕字體顏色裸影,添加dialog的顯示唐片、消失的動(dòng)畫抛寝。最后將向你介紹如何自定義一個(gè) AlertDialog。源碼地址 : https://github.com/Mrqinlei/CustomDialog
Material Dialog
本文中使用的 AlertDialog 是 android.support.v7.app 中的它與 android.app 中的不同可以參考這篇文章: http://www.reibang.com/p/6caffdbcd5db ,現(xiàn)在介紹它的基本用法.
基本使用
基本樣式
- 設(shè)置圖標(biāo)
builder.setIcon(R.mipmap.ic_launcher);//設(shè)置圖標(biāo)
- 設(shè)置標(biāo)題
builder.setTitle("Material Design Dialog");//設(shè)置標(biāo)題
- 設(shè)置內(nèi)容
builder.setMessage("這是 Material Design Dialog");//設(shè)置內(nèi)容
- 設(shè)置按鈕
- 確定按鈕
builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "確定", Toast.LENGTH_SHORT).show();
}
});
- 取消按鈕
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "取消", Toast.LENGTH_SHORT).show();
}
});
- 中立按鈕
builder.setNeutralButton("中性", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "中性", Toast.LENGTH_SHORT).show();
}
});
- 顯示 dialog
builder.show();
修改頭布局
builder.setCustomTitle(view);
列表選項(xiàng)
builder.setItems(new String[]{"Item1", "Item2", "Item3"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "which " + which, Toast.LENGTH_SHORT).show();
}
});
單選列表選項(xiàng)
builder.setSingleChoiceItems(
new String[]{"233333", "hahahaha", "lalalala"},//內(nèi)容定義
0, //-1,代表默認(rèn)不選擇
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "which" + which, Toast.LENGTH_SHORT).show();
}
});
列表選項(xiàng),列表布局可自定義
final List<MyListBean> lists = new ArrayList<>();
lists.add(new MyListBean("23232", "232323232323232"));
lists.add(new MyListBean("hahah", "hahahahhahhahah"));
lists.add(new MyListBean("lalal", "lalalalallalala"));
builder.setAdapter(new MyListAdapter(MainActivity.this, lists), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, lists.get(which).title, Toast.LENGTH_SHORT).show();
}
});
多選列表選項(xiàng)
builder.setMultiChoiceItems(
new String[]{"233333", "hahahaha", "lalalala"},//內(nèi)容定義
new boolean[]{true, false, false},
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(MainActivity.this, "which " + which + " " + isChecked, Toast.LENGTH_SHORT).show();
}
});
自定義 content 布局
View view1 = View.inflate(this, R.layout.normal_dialog, null);
final EditText editText = (EditText) view1.findViewById(R.id.normal_dialog_edittext);
builder.setView(view1);
ProgressDialog 加載中 dialog
ProgressDialog progressDialog = new ProgressDialog(this, R.style.CustomDialog);
progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//默認(rèn)
progressDialog.setCancelable(true);
progressDialog.setCanceledOnTouchOutside(true);
progressDialog.show();
new ProgressDialog(this, R.style.CustomDialog); 中的第二個(gè)參數(shù) R.style.CustomDialog 可以為 Dialog 設(shè)置一些不同的風(fēng)格:
<style name="CustomDialog" parent="Theme.AppCompat.Dialog">
<item name="android:backgroundDimEnabled">true</item><!--true 屏幕變暗-->
<item name="android:windowBackground">@android:color/transparent</item><!-- 背景透明 -->
</style>
進(jìn)度條 dialog
final ProgressDialog progressDialog = new ProgressDialog(this);
progressDialog.setTitle("軟件更新");
progressDialog.setMessage("新版本來了,快來下載吧!");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setCancelable(true);
progressDialog.setCanceledOnTouchOutside(true);
progressDialog.setMax(100);
通過 setProgress(); 方法設(shè)置進(jìn)度條的進(jìn)度
自定義 dialog (一個(gè)帶圓角的 dialog)
布局文件
設(shè)置一個(gè)圓角的背景 android:background="@drawable/custom_dialog"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="280dp"
android:layout_height="200dp"
android:background="@drawable/custom_dialog"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Custom Dialog"
android:textColor="@android:color/black"
android:textSize="24sp" />
</LinearLayout>
定義一個(gè) Style:
<!--自定義Dialog-->
<style name="CustomDialog" parent="Theme.AppCompat.Dialog">
<item name="android:backgroundDimEnabled">true</item><!--true 屏幕變暗-->
<item name="android:windowBackground">@android:color/transparent</item><!-- 背景透明 -->
</style>
自定義 Dialog,使用定義的 Style
public class CustomDialog extends AlertDialog {
public CustomDialog(@NonNull Context context) {
this(context, R.style.CustomDialog); //設(shè)置Style
}
protected CustomDialog(@NonNull Context context, @StyleRes int themeResId) {
super(context, themeResId);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
init(getContext());
}
private void init(final Context context) {
// setCancelable(true);//是否可以取消 (也可以在調(diào)用處設(shè)置)
// setCanceledOnTouchOutside(false);//是否點(diǎn)擊外部消失
setContentView(R.layout.custom_dialog);
WindowManager.LayoutParams params = getWindow().getAttributes();
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
Window dialog_window = this.getWindow();
dialog_window.setGravity(Gravity.CENTER);//設(shè)置顯示的位置
dialog_window.setAttributes(params);//設(shè)置顯示的大小
}
}
添加動(dòng)畫效果
添加動(dòng)畫
- 進(jìn)入動(dòng)畫
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200">
<translate
android:fromYDelta="100%"
android:toYDelta="0" />
<alpha
android:fromAlpha="0"
android:toAlpha="1" />
</set>
- 退出動(dòng)畫
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="200">
<translate
android:fromYDelta="0"
android:toYDelta="100%" />
<alpha
android:fromAlpha="1"
android:toAlpha="0" />
</set>
Style文件設(shè)置
<!--自定義Dialog-->
<style name="CustomDialog" parent="Theme.AppCompat.Dialog">
<item name="android:backgroundDimEnabled">true</item><!--true 屏幕變暗-->
<item name="android:windowBackground">@android:color/transparent</item><!-- 背景透明 -->
<!-- Dialog進(jìn)入及退出動(dòng)畫 -->
<item name="android:windowAnimationStyle">@style/DialogAnimation</item>
</style>
<!-- Dialog進(jìn)出動(dòng)畫 -->
<style name="DialogAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/custom_dialog_in</item>
<item name="android:windowExitAnimation">@anim/custom_dialog_out</item>
</style>
構(gòu)造方法中使用
CustomDialog(@NonNull Context context, @StyleRes int themeResId)
修改 dialog 底部按鈕的顏色
設(shè)置 Style
<style name="CustomDialogButton" parent="Theme.AppCompat.Light.Dialog">
<item name="buttonBarPositiveButtonStyle">@style/buttonBarPositive</item>
<item name="buttonBarNeutralButtonStyle">@style/buttonBarNeutral</item>
<item name="buttonBarNegativeButtonStyle">@style/buttonBarNegative</item>
</style>
<style name="buttonBarPositive" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
<item name="android:textColor">@color/sure</item>
</style>
<style name="buttonBarNegative" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
<item name="android:textColor">@color/cancel</item>
</style>
<style name="buttonBarNeutral" parent="@style/Widget.AppCompat.Button.ButtonBar.AlertDialog">
<item name="android:textColor">@color/neutrality</item>
</style>
構(gòu)造方法中使用
CustomDialog(@NonNull Context context, @StyleRes int themeResId)