Dialog常见问题

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对象。

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);

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

转自:https://blog.csdn.net/baopengjian/article/details/78250863

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值