Android 开发技术分享

Kotlin-使用Activity创建一个完美的对话框

2020-06-10  本文已影响0人  Cosecant

背景

开发中我们经常需要使用对话框来完成一些提示,或者一些简单的交互页面。由于Dialog对象可能存在一些交互不便的原因,因此我们必须使用Activity来进行业务交互。

但是,往往,在Activity作为Dialog的时候,会出现一些奇怪的显示问题,现在我找到一些能处理这些问题的逻辑代码,希望有效,仅作参数。

如何完美呈现Activity式的对话框?

  1. Activity的对话框样式声明。

    <!--Activity做对话框的效果-->
    <style name="ActivityDialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <item name="android:windowFullscreen">true</item>
        <item name="android:fitsSystemWindows">true</item>
        <item name="android:gravity">center</item>
        <item name="android:layout_gravity">center</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowMinWidthMinor">100%</item>
        <item name="android:windowMinWidthMajor">100%</item>
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="windowNoTitle">true</item>
        <item name="titleEnabled">false</item>
        <item name="showTitle">false</item>
        <item name="android:background">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <!--<item name="android:background">@color/transparent</item>-->
    </style>
    
    
    <style name="AppDialogTheme" parent="ActivityDialogTheme">
        <item name="android:gravity">bottom</item>
        <item name="android:layout_gravity">bottom</item>
        <item name="android:windowFullscreen">false</item>
        <item name="android:windowIsFloating">false</item>
    </style>
    
  2. 处理Activity,要求其全屏显示内容,但不得扩展到底部导航栏区域。

    <!-- 
      配置参数1:
        clipToPadding="false",
        fitsSystemWindows="true",
        gravity="bottom" 
    -->
    <androidx.appcompat.widget.LinearLayoutCompat
        android:id="@+id/llcCover"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"  
        android:fitsSystemWindows="true"
        android:gravity="bottom"
        android:onClick="@{onClickEvent::onClick}"
        android:orientation="vertical"
        tools:background="#34000000"
        tools:context=".ui.common.UserShareActivity">
        ... //省略一些内容
    </androidx.appcompat.widget.LinearLayoutCompat>
    
    fun initActivity(){
        window.statusBarColor = Color.TRANSPARENT
        rootView.systemUiVisibility = 
            rootView.systemUiVisibility or
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        window.setGravity(Gravity.BOTTOM)
        llcCover.updateLayoutParams<ViewGroup.LayoutParams> { height = screenHeight }
    }
    
    
  3. 就以上操作配置后,Activity方式的dialog就不会在全面屏上飘起来,亦或是沉入到有BottomNavigationBar的手机屏幕下面了。

如果觉得有用,请点个赞。原创内容,转载请标明转载地址,谢谢!

上一篇下一篇

猜你喜欢

热点阅读