Kotlin-使用Activity创建一个完美的对话框
2020-06-10 本文已影响0人
Cosecant
背景
开发中我们经常需要使用对话框来完成一些提示,或者一些简单的交互页面。由于Dialog对象可能存在一些交互不便的原因,因此我们必须使用Activity来进行业务交互。
但是,往往,在Activity作为Dialog的时候,会出现一些奇怪的显示问题,现在我找到一些能处理这些问题的逻辑代码,希望有效,仅作参数。
如何完美呈现Activity式的对话框?
-
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>
-
处理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 } }
-
就以上操作配置后,Activity方式的dialog就不会在全面屏上飘起来,亦或是沉入到有BottomNavigationBar的手机屏幕下面了。
如果觉得有用,请点个赞。原创内容,转载请标明转载地址,谢谢!