Dialog 圆角问题

源代码 👉 github.com/javakam/Dia…

Dialog圆角无效问题

同样是setBackgroundDrawableResourcesetBackgroundDrawable无效的问题; 共分两种情形, 一是有标题Dialog, 另一种是无标题Dialog

原因

Dialog设置背景实质上用的是Dialog.setContentView方法, 而Android系统提供的Dialog本身是有标题的布局空间的, 当通过Window设置把标题隐藏掉后, 无标题下做个圆角是给剩下的FrameLayout做圆角, 这样就很好理解了。

控制Dialog标题显示隐藏的方式

requestWindowFeature(Window.FEATURE_NO_TITLE)

or

<style name="AndoDialog">
        <item name="android:windowNoTitle">false</item><!--false 有标题 true无标题-->
</style>

有标题

直接设置window.setBackgroundDrawableResource(R.drawable.rectangle_ando_dialog_bottom)即可, 并不是一些博客中所说的如下配置:

//没用
window.setBackgroundDrawableResource(android.R.color.transparent)
window.decorView.setPadding(0, 0, 0, 0)

有标题效果图

无标题

无标题处理圆角问题, 就是给FrameLayout做圆角

无标题window.setBackgroundDrawableResource(R.drawable.rectangle_ando_dialog_bottom) 设置不生效, 需要对Dialog的布局文件进行调整。 如底部弹窗左上角和右上角是圆角, 设置圆角背景的同时加上paddingXXX属性,数值与 drawableandroid:xxxRadius="10dp"相等。

//Dialog顶层布局中
android:paddingTop="10"
android:background="@drawable/rectangle_ando_dialog_bottom"

无标题效果图

可以看到顶部存有一部分的白色间隙

rectangle_ando_dialog_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp" />

    <solid android:color="@color/color_ando_dialog_white" />
</shape>

源代码 👉 github.com/javakam/Dia…

posted @ 2021-01-08 17:47  javakam  阅读(0)  评论(0)    收藏  举报  来源