Dialog常见问题(布局错误、黑边、圆角、异常)
来源:互联网 发布:智能手表软件下载 编辑:程序博客网 时间:2024/06/08 18:47
#1 new AlertDialog.Builder(getApplicationContext),Dialog弹出时会报错:
AndroidRuntime(27884): android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@42c0d5e0 -- permission denied for this window type
导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。同样,也不能用Service对象。
AndroidRuntime(27884): android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@42c0d5e0 -- permission denied for this window type
导致报这个错是在于new AlertDialog.Builder(mcontext),虽然这里的参数是AlertDialog.Builder(Context context)但我们不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。同样,也不能用Service对象。
#2 去除黑边框
getWindow().setBackgroundDrawable(new BitmapDrawable());
或者getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
#3 设置圆角:当对dialog设置圆角的drawable后,若又设置顶部或底部的背景,就会发现圆角被盖住,产生不了圆角效果,解决方法:
第一种:整个dialog不设置圆角,顶部和底部分别设置带有圆角的dialog,定义2个drawable的xml。
第二种:整个dialog设置,但顶部和底部布局必须不设置颜色;通过圆角的drawable设置,dialog中间的布局设置背景色是不会盖住圆角的,但有可能重复绘制,GPU重复渲染
推荐第一种
#4 Error:requestFeature() must be called before adding content
错误代码:
final AlertDialog dialog = new AlertDialog.Builder(SettingActivity.this).create();
dialog.setContentView(R.layout.dialog2);
dialog.show()
正确代码:
final AlertDialog dialog = new AlertDialog.Builder(SettingActivity.this).create();
dialog.show();
dialog..setContentView(R.layout.dialog2);
setContentView要在show之后(注意是AlertDialog而不是AlertDialog.Build)
#5 AlertDialog中含有EditText不显示软键盘
AlertDialog.Builder builder = new AlertDialog.Builder(this);
AlertDialog dialog = builder.create();
dialog.show();
dialog.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.setContentView(R.layout.dialog_content);
注意:clearFlags方法要放在 dialog.show()之后,不然不会起作用。
#6 Dialog加载布局的根节点宽高属性不起作用,或者布局错乱
解决:手动设置dialog对应的window宽高
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
DisplayMetrics d = context.getResources().getDisplayMetrics();
lp.width = (int) (d.widthPixels * 0.9); // 宽度设置为屏幕的0.9
lp.height = LayoutParams.WRAP_CONTENT;
dialogWindow.setAttributes(lp);
原因:Dialog.setContentView
->Window.setContentView(PhoneWindow是Window的唯一实现)
->PhoneWindow.setContentView
setContentView(view, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
重新设置了宽高属性为matchParent
getWindow().setBackgroundDrawable(new BitmapDrawable());
或者getWindow().setBackgroundDrawableResource(Android.R.color.transparent);
#3 设置圆角:当对dialog设置圆角的drawable后,若又设置顶部或底部的背景,就会发现圆角被盖住,产生不了圆角效果,解决方法:
第一种:整个dialog不设置圆角,顶部和底部分别设置带有圆角的dialog,定义2个drawable的xml。
第二种:整个dialog设置,但顶部和底部布局必须不设置颜色;通过圆角的drawable设置,dialog中间的布局设置背景色是不会盖住圆角的,但有可能重复绘制,GPU重复渲染
推荐第一种
#4 Error:requestFeature() must be called before adding content
错误代码:
final AlertDialog dialog = new AlertDialog.Builder(SettingActivity.this).create();
dialog.setContentView(R.layout.dialog2);
dialog.show()
正确代码:
final AlertDialog dialog = new AlertDialog.Builder(SettingActivity.this).create();
dialog.show();
dialog..setContentView(R.layout.dialog2);
setContentView要在show之后(注意是AlertDialog而不是AlertDialog.Build)
#5 AlertDialog中含有EditText不显示软键盘
AlertDialog.Builder builder = new AlertDialog.Builder(this);
AlertDialog dialog = builder.create();
dialog.show();
dialog.getWindow().clearFlags(
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.setContentView(R.layout.dialog_content);
注意:clearFlags方法要放在 dialog.show()之后,不然不会起作用。
#6 Dialog加载布局的根节点宽高属性不起作用,或者布局错乱
解决:手动设置dialog对应的window宽高
Window dialogWindow = dialog.getWindow();
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
DisplayMetrics d = context.getResources().getDisplayMetrics();
lp.width = (int) (d.widthPixels * 0.9); // 宽度设置为屏幕的0.9
lp.height = LayoutParams.WRAP_CONTENT;
dialogWindow.setAttributes(lp);
原因:Dialog.setContentView
->Window.setContentView(PhoneWindow是Window的唯一实现)
->PhoneWindow.setContentView
setContentView(view, new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
重新设置了宽高属性为matchParent
阅读全文
1 0
- Dialog常见问题(布局错误、黑边、圆角、异常)
- 去除自定义alertdialog(dialog)黑边
- 去除dialog的黑边
- 去掉dialog的黑边
- android 自定义Dialog去除黑边
- android dialog四周的黑边消除
- 自定义dialog并且去除黑边
- 最简单自定义dialog去除dialog黑边方法
- Dialog常见问题
- Android布局常见异常错误
- Maven常见问题、异常、错误整理【持续更新】
- Dialog无黑边框
- Dialog出现黑框
- AlertDialog去除黑边自定义布局
- android_自定义dialog去除黑边_快捷方法
- 【Android】自定义透明dialog 去除边缘阴影 黑边
- 记录帖:重写dialog去掉黑边的样式设置
- Dialog 异常
- kotlin学习笔记——枚举、封闭类
- web.xml is missing and <failOnMissingWebXml> is set to true错误
- 找不到系统安全日志/var/log/secure文件的问题
- 如何更好的使用阿里云资源编排ROS免费教程
- 什么是设计模式?为什么要使用设计模式?有什么好处?
- Dialog常见问题(布局错误、黑边、圆角、异常)
- 数据库集群技术
- 数论知识
- XML特殊字符(如:换行)
- wait和waitpid
- 多进程多组建性能测试
- JavaScript之闭包
- 三.Hibernate 执行复杂的sql
- UVA-12265 Selling Land