开发中经常要用到自定义的Dialog ,所以封装一个方便以后使用。
先创建一个类 DialogUtils
生成构造方法
public class DialogUtils {
private Context context;
private DialogInterface dialogInterface;
public DialogUtils(Context context, DialogInterface dialogInterface) {
this.context = context;
this.dialogInterface = dialogInterface;
}
}
创建带一个按钮的Dialog
/***
*
* @param msg 内容信息
* @param btnMsg 确定按钮的文字提示
* @param layoutID 布局
* @param valueId 显示内容的Id
* @param btnId 按钮的Id
* @param canceledOnTouchOutside 点击外部是否取消
*/
public void showOneBtnDialog(String msg,String btnMsg ,int layoutID, int valueId, int btnId,boolean canceledOnTouchOutside) {
final Dialog dialog = new Dialog(context);
dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
View view = LayoutInflater.from(context).inflate(layoutID, null, false);
TextView valueTv = view.findViewById(valueId);
Button button = view.findViewById(btnId);
button.setText(btnMsg);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
dialogInterface.onOkBtnClick(view);
}
});
valueTv.setText(msg);
dialog.setView(view);
dialog.show();
}
创建带两个按钮的dialog
/***
*
* @param msg 内容信息
* @param btnMsg 确定按钮的文字提示
* @param layoutID 布局
* @param valueId 显示内容的Id
* @param btnOkId 确定按钮的Id
* @param btnCancleId 取消按钮的Id
* @param canceledOnTouchOutside 点击外部是否取消
*/
public void showTwoBtnDialog(String msg,String btnMsg ,int layoutID, int valueId, int btnOkId,int btnCancleId, boolean canceledOnTouchOutside) {
final Dialog dialog = new Dialog(context);
dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
View view = LayoutInflater.from(context).inflate(layoutID, null, false);
TextView valueTv = view.findViewById(valueId);
Button button = view.findViewById(btnOkId);
Button button1 = view.findViewById(btnCancleId);
button.setText(btnMsg);
valueTv.setText(msg);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
dialogInterface.onCancleBtnClick(view);
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
dialogInterface.onOkBtnClick(view);
}
});
dialog.setView(view);
dialog.show();
}
按钮点击事件的回调方法
public interface DialogInterface {
void onOkBtnClick(View view);
void onCancleBtnClick(View view);
}
在Activity里的应用
首先实现DialogInterface接口
重写下面两个方法
@Override
public void onOkBtnClick(View view) {
switch (view.getId()){
case R.id.OkBtn:
Toast.makeText(this, "一个按钮点击了确定", Toast.LENGTH_SHORT).show();
break;
case R.id.two_OkBtn:
Toast.makeText(this, "2个按钮点击了确定", Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void onCancleBtnClick(View view) {
Toast.makeText(this, "点击了取消", Toast.LENGTH_SHORT).show();
}
然后在想用的地方调用
final DialogUtils utils = new DialogUtils(this, this);
findViewById(R.id.oneBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
utils.showOneBtnDialog("这是一个按钮的dialog", "确定", R.layout.one_dialog, R.id.value_tv, R.id.OkBtn, false);
}
});
findViewById(R.id.twoBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
utils.showTwoBtnDialog("这是两个按钮的dialog", "确定", R.layout.two_dialog, R.id.value_tv, R.id.two_OkBtn, R.id.cancleBtn, true);
}
});
如果要改变Dialog宽高按照如下设置
Window window = dialog.getWindow();
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (int) (screenWidth*0.6);
window.setAttributes(lp);
如果需要设置圆角和动画等其他的设置
<style name="ActionSheetDialogStyle" parent="@android:style/Theme.Dialog">
<!-- 背景透明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<!-- 浮于Activity之上 -->
<item name="android:windowIsFloating">true</item>
<!-- 边框 -->
<item name="android:windowFrame">@null</item>
<!-- Dialog以外的区域模糊效果 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 半透明 -->
<item name="android:windowIsTranslucent">true</item>
<!-- Dialog进入及退出动画 -->
<item name="android:windowAnimationStyle">@style/ActionSheetDialogAnimation</item>
</style>
<style name="ActionSheetDialogAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/show_dialog</item>
<item name="android:windowExitAnimation">@anim/out_diaolg</item>
</style>
设置圆角
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="15dp"></corners>
<solid android:color="#ffffff"></solid>
</shape>
设置完代码如下
/***
*
* @param msg 内容信息
* @param btnMsg 确定按钮的文字提示
* @param layoutID 布局
* @param valueId 显示内容的Id
* @param btnId 按钮的Id
* @param canceledOnTouchOutside 点击外部是否取消
*/
public void showOneBtnDialog(String msg,String btnMsg ,int layoutID, int valueId, int btnId,boolean canceledOnTouchOutside) {
final Dialog dialog = new Dialog(context,R.style.ActionSheetDialogStyle);
dialog.setCanceledOnTouchOutside(canceledOnTouchOutside);
View view = LayoutInflater.from(context).inflate(layoutID, null, false);
TextView valueTv = view.findViewById(valueId);
Button okBtn = view.findViewById(btnId);
okBtn.setText(btnMsg);
okBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
dialogInterface.onOkBtnClick(view);
}
});
valueTv.setText(msg);
dialog.setContentView(view);
dialog.show();
Window window = dialog.getWindow();
int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = (int) (screenWidth*0.6);
window.setAttributes(lp);
}
网友评论