Android Dialog对话框高度自适应,限制上下边距和设置宽度

因需求对Dialog对话框高度自适应,限制上下边距和设置宽度

高度自适应

1、XML控制设置

只要包裹需要高度自适应的控件全部把 layout_height 设置为 wrap_content

2、样式设置

    <!--对话框背景半透明-->
    <style name="DialogBgTranslucentStyle" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <!--是否浮现在activity之上-->
        <item name="android:windowIsFloating">true</item>
        <!--设置外边距(外面半透明部分)距离限制其高度-->
        <item name="android:layout_marginTop">100dp</item>
        <item name="android:layout_marginBottom">100dp</item>
    </style>

    <!--对话框背景透明-->
    <style name="DialogBgTransparentStyle" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- 背景透明 -->
        <item name="android:windowBackground">@android:color/transparent</item>
        <!-- 半透明 -->
        <item name="android:windowIsTranslucent">false</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:backgroundDimEnabled">false</item>
        <!--是否浮现在activity之上-->
        <item name="android:windowIsFloating">true</item>
        <!--设置外边距(外面透明部分)距离限制其高度--> 
       <item name="android:layout_marginTop">100dp</item>
        <item name="android:layout_marginBottom">100dp</item>
    </style>

设置宽度

    /**
     * 设置对话框宽度
     */
    fun setDialogWidth() {
        val window = dialog!!.window
        //获得窗体的属性
        if (window != null) {
            val lp = window.attributes
            lp.width = ScreenUtils.getScreenWidth(requireContext())
            lp.width = lp.width - (lp.width / 6)
            //将属性设置给窗体
            window.attributes = lp
        }
    }

    /**
     * 设置对话框宽度
     *
     * @param width 宽度
     */
    fun setDialogWidth(width: Int) {
        val window = dialog!!.window
        //获得窗体的属性
        if (window != null) {
            val lp = window.attributes
            lp.width = width
            //将属性设置给窗体
            window.attributes = lp
        }
    }

    /**
     * 设置对话框宽度
     *
     * @param window  dialog 窗体
     * @param context 上下文
     */
    fun setDialogWidth(window: Window?, context: Context?) {
        //获得窗体的属性
        if (window != null) {
            val lp = window.attributes
            lp.width = ScreenUtils.getScreenWidth(context)
            lp.width = lp.width - (lp.width / 6)
            //将属性设置给窗体
            window.attributes = lp
        }
    }

    /**
     * 设置对话框宽度
     *
     * @param window dialog 窗体
     * @param width  宽度
     */
    fun setDialogWidth(window: Window?, width: Int) {
        //获得窗体的属性
        if (window != null) {
            val lp = window.attributes
            lp.width = width
            //将属性设置给窗体
            window.attributes = lp
        }
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容