本著不再重復(fù)造輪子的精神僧界,封裝一個(gè)簡(jiǎn)單實(shí)用的Dialog,
1,支持自定義布局
2臭挽,支持設(shè)置顯示位置以及與屏幕邊距
3捂襟,隨心所欲的添加動(dòng)畫效果
4,添加子View接口回調(diào)欢峰,可以為所有子View添加點(diǎn)擊事件
5葬荷,鏈?zhǔn)秸{(diào)用涨共,一行實(shí)現(xiàn)添加所有屬性以及回調(diào)
代碼如下:
public class DialogUtils {
private Context mContext;
private int layoutId;
private int layoutPosition;
private int padingTop;
private int padingBottom;
private int padingRight;
private int padingLeft;
/**
* 靜態(tài)內(nèi)部類的方式構(gòu)建單例模式
*/
private DialogUtils(){}
private static class DialogHolder{
private static DialogUtils instance= new DialogUtils();
}
public static DialogUtils getInstance(){
return DialogHolder.instance;
}
/**
* 傳入上下文
* @param context
* @return
*/
public final DialogUtils with(Context context){
this.mContext= context;
return this;
}
/**
* 傳入彈窗需要的布局
* @param layoutId
* @return
*/
public final DialogUtils setlayoutId(int layoutId){
this.layoutId= layoutId;
return this;
}
/**
* 設(shè)置彈窗的位置
* @param layoutPosition
* @return
*/
public final DialogUtils setlayoutPosition(int layoutPosition){
this.layoutPosition= layoutPosition;
return this;
}
/**
* 設(shè)置彈窗距離屏幕的距離
* @param padingLeft
* @param padingTop
* @param padingRight
* @param padingBottom
* @return
*/
public final DialogUtils setlayoutPading(int padingLeft,int padingTop,int padingRight,int padingBottom){
this.padingLeft= padingLeft;
this.padingTop= padingTop;
this.padingRight= padingRight;
this.padingBottom= padingBottom;
return this;
}
public void show(){
Dialog dialog = new Dialog(mContext, R.style.ActionSheetDialogStyle);
View view = LayoutInflater.from(mContext).inflate(layoutId, null);
dialog.setContentView(view);
//獲得dialog的window窗口
Window window = dialog.getWindow();
//設(shè)置dialog在屏幕位置
window.setGravity(layoutPosition);
window.getDecorView().setPadding(padingLeft, padingTop, padingRight, padingBottom);
//獲得window窗口的屬性
android.view.WindowManager.LayoutParams lp = window.getAttributes();
//設(shè)置窗口寬度為充滿全屏
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
//設(shè)置窗口高度為包裹內(nèi)容
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
//將設(shè)置好的屬性set回去
window.setAttributes(lp);
dialog.show();
}
添加回調(diào)接口:
public interface ViewInterface {
void getChildView(View view, int layoutResId);
}
/**
* 設(shè)置子View
*
* @param listener ViewInterface
* @return Builder
*/
public DialogUtils setOnChildViewclickListener(DialogUtils.ViewInterface listener) {
this.listener = listener;
return this;
}
設(shè)置彈窗消失:
public static void dismiss(){
if (dialog!=null && dialog.isShowing()){
dialog.dismiss();
}
}
加入自定義動(dòng)畫:
switch (dialogAnimaType){
case 0:
//自下而上動(dòng)畫
dialog = new Dialog(mContext, R.style.ActionSheetDialogStyle);
break;
case 1:
//淡入淡出縮放動(dòng)畫
dialog = new Dialog(mContext, R.style.ActionSheetDialogStyle1);
break;
}
然后調(diào)用:
DialogUtils.getInstance()
.with(getApplicationContext())//上下文
.setlayoutId(R.layout.make_money_pop_window_layout)//布局文件
.setlayoutPosition(Gravity.BOTTOM)//位置
.setlayoutAnimaType(0)//動(dòng)畫類型:0自下而上動(dòng)畫,1淡入淡出動(dòng)畫
.setlayoutPading(20, 0, 20, 20)//與屏幕距離
.setOnChildViewclickListener(new DialogUtils.ViewInterface() {
@Override
public void getChildView(View view, int layoutResId) {
//處理dialog內(nèi)部控件的點(diǎn)擊事件
LinearLayout weichat_share_ll= view.findViewById(R.id.weichat_share_ll);
weichat_share_ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this,"微信",Toast.LENGTH_SHORT).show();
}
});
TextView disMissTv= view.findViewById(R.id.share_dismiss_tv);
disMissTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
DialogUtils.dismiss();
}
});
}
})
.show();
附上兩張效果圖:
523964774539518641.png
551425696019632053.png
Demo地址:點(diǎn)這里