美文网首页Android 开发技术分享
Kotlin-使用Activity创建一个完美的对话框

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

作者: Cosecant | 来源:发表于2020-06-10 14:10 被阅读0次

    背景

    开发中我们经常需要使用对话框来完成一些提示,或者一些简单的交互页面。由于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的手机屏幕下面了。

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

    相关文章

      网友评论

        本文标题:Kotlin-使用Activity创建一个完美的对话框

        本文链接:https://www.haomeiwen.com/subject/hufgzhtx.html