前言
平時項目開發總要自定義dialog滿足産品的設計需求,但系統提供Dialog和AlertDialog用起來不是很友善,是以自己封裝一個好用的Dialog基類是再好不過了。
實作
BaseDialog.java
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.View;
import android.view.WindowManager;
/**
* Created by WJX .
* Desc: 一個便于自定義Dialog樣式的基類
* Created on 2017/1/7 11:19.
* Mail:[email protected]
*/
public abstract class BaseDialog {
protected Context context;
private Dialog dialog;
protected abstract int getDialogStyleId();//子類實作擷取樣式id
protected abstract View getView();//子類實作内容布局View
protected BaseDialog(Context context){
this.context=context;
//初始化基礎對話框
if (getDialogStyleId()==0){
dialog=new Dialog(context);
}else {
dialog=new Dialog(context,getDialogStyleId());
}
//dialog設定内容布局view
dialog.setContentView(getView());
//關閉系統鍵盤
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
/**
* dialog設定能否點選取消,鍊式
*/
public BaseDialog setCancelable(boolean cacel){
dialog.setCancelable(cacel);
return this;
}
/**
* dialog顯示,鍊式
*/
public BaseDialog show(){
dialog.show();
return this;
}
/**
* dialog消失,鍊式
*/
public BaseDialog disMiss(){
dialog.dismiss();
return this;
}
/**
* dialog是否在顯示,鍊式
*/
public boolean isShowing(){
return dialog.isShowing();
}
/**
* dialog消失監聽,鍊式
*/
public BaseDialog setOnDismissListener(DialogInterface.OnDismissListener dismissListener){
dialog.setOnDismissListener(dismissListener);
return this;
}
/**
* dialog取消監聽,鍊式
*/
public BaseDialog setOnCancelListener(DialogInterface.OnCancelListener cancelListener){
dialog.setOnCancelListener(cancelListener);
return this;
}
/**
* dialog顯示監聽,鍊式
*/
public BaseDialog setOnShowListener(DialogInterface.OnShowListener onShowListener){
dialog.setOnShowListener(onShowListener);
return this;
}
}
YuanJiaoDialog.java 圓角對話框
/**
* Created by WJX .
* Desc: 一個圓角dialog
* Created on 2017/1/7 11:05.
* Mail:[email protected]
*/
public class YuanJiaoDialog extends BaseDialog {
public YuanJiaoDialog(Context context) {
super(context);
}
@Override
protected int getDialogStyleId() {
return R.style.dialog_style_one;
}
@Override
protected View getView() {
View view= LayoutInflater.from(context).inflate(R.layout.dialog_conent_layout,null);
return view;
}
}
dialog_style_one
<style name="dialog_ios_style" parent="@android:style/Theme.Dialog">
<!--window 背景,這裡可以設定整個窗體的背景,不過會被窗體裡面的内容布局覆寫,圓角,窗體大小在某種情況下可以通過這裡的背景設定-->
<item name="android:windowBackground">@drawable/yuanjiao_background</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowFrame">@null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowMinWidthMajor">100%</item>
</style>
yuanjiao_background.xml 窗體背景布局xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
>
<size android:height="200dp" android:width="200dp"/>
<corners android:radius="20dp"/>
<solid android:color="@android:color/white" />
</shape>