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

随笔6个月前发布 十二
81 0 0

因需求对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
        }
    }

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...