dialog四周留白以及圆角样式设置无效的问题

30 篇文章 0 订阅

8.11的关于dialog的两个问题

1关于Dialog无法全屏的原因

自定义的dialog如果不指定样式的话,会自动继承系统默认的样式,在四周留下空隙。项目中最初自定义dialog的构造函数如下。

public MyDialog(@NonNull Context context) {
    super(context);
}

查看源码点进去以后会发现如果不指定样式,会使用这个默认的系统样式。

/**
 * Creates a dialog window that uses the default dialog theme.
 * <p>
 * The supplied {@code context} is used to obtain the window manager and
 * base theme used to present the dialog.
 *
 * @param context the context in which the dialog should run
 * @see android.R.styleable#Theme_dialogTheme
 */
public Dialog(@NonNull Context context) {
    this(context, 0, true);
}

而系统样式里面有很多属性这里都省略了,直接看和本次有关的属性,可以看到设置了上下左右的内边距都为10dp,因此是无法显示全屏的。

<style name="Theme.Dialog">
    ……
 
    <item name="listPreferredItemPaddingLeft">10dip</item>
    <item name="listPreferredItemPaddingRight">10dip</item>
    <item name="listPreferredItemPaddingStart">10dip</item>
    <item name="listPreferredItemPaddingEnd">10dip</item>

    <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
</style>

修改方式也很简单

@Override protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_classcourse_dialogdiscount);
        Window window = getWindow();
        if (null != window) {
            WindowManager.LayoutParams params = window.getAttributes();
            params.width = WindowManager.LayoutParams.MATCH_PARENT;
            params.gravity = Gravity.BOTTOM;
            window.getDecorView().setPadding(0,0,0,0);

            window.setAttributes(params);
        }
    }

2设置圆角背景没用

dialog默认的样式是有背景的,需要设置为透明

<item name="android:background">@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>

或者可以在代码中将背景设置为透明

 window.getDecorView().setBackgroundResource(R.color.transparent);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值