失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Android Dialog自定义弹窗

Android Dialog自定义弹窗

时间:2020-07-23 21:40:35

相关推荐

Android Dialog自定义弹窗

1、加载自定义的弹窗内容

privatevoidshowDialog(Context context){AlertDialog.Builder builder = new AlertDialog.Builder(context);builder.setTitle("弹窗标题");LayoutInflater inflater = LayoutInflater.from(context);//弹窗需要展示什么内容,就在R.layout.my_dialog自己添加View root = inflater.inflate(R.layout.my_dialog, null);builder.setView(root);AlertDialogdialog = builder.create();dialog.show();}

2、自定义弹窗宽高(按屏幕总宽高的百分比来设置)要在 dialog.show() 之后调用

private static final float SCALE_WIDTH = 0.75f;//弹窗宽度百分比private static final float SCALE_HEIGHT = 0.8f;//弹窗高度百分比private void setDialogSize(Context context,AlertDialogdialog) {Window window = dialog.getWindow();DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();int screenWidth = displayMetrics.widthPixels;int screenHeight = displayMetrics.heightPixels;WindowManager.LayoutParams dialogParems = window.getAttributes();dialogParems.width = (int) (screenWidth * SCALE_WIDTH);//可以设置具体的值,比如500,单位是pxdialogParems.height = (int) (screenHeight * SCALE_HEIGHT);window.setAttributes(dialogParems);}

3、设置点击弹窗输入框时允许弹出输入法软键盘

mDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);mDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

4、设置弹窗是否可以消失(点击取消或确认时)

//canDismiss:如果传参true,则弹窗正常消失,如果传参false,则点击确认或取消按钮后弹窗不消失private static void setDialogCanDismiss(boolean canDismiss) {try {Field field = mDialog.getClass().getSuperclass().getDeclaredField("mShowing");field.setAccessible(true);field.set(mDialog, canDismiss);} catch (Exception e) {Log.e("tag", Objects.requireNonNull(e.getMessage()));}}//用法如下:builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//点击了确定按钮,此时自己做一些判断,看是否需要弹窗不消失继续显示if (inNeedShowDialog) {//设置弹窗不消失setDialogCanDismiss(false);}else{//设置弹窗可以消失setDialogCanDismiss(true);}}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {//设置弹窗可以消失setDialogCanDismiss(true);mDialog.dismiss();}});

5、弹窗返回数据的接口定义,接口名、函数名、参数名、数据类型都可以根据实际需求灵活自定义

interface IDialogResult {void onGetResult(List<HashMap<String, String>> result);}

6、弹窗自定义view常用的一些api

int childCount = parentView.getChildCount();//获取父控件中子控件的数量View childView = parentView.getChildAt(position);//获取指定位置的子控件对象parentView.removeView(parentView.getChildAt(position));//移除指定位置的子控件对象parentView.removeView(childView);//移除指定的子控件对象parentView.addView(childView);//插入子控件

如果觉得《Android Dialog自定义弹窗》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。