-
windowIsFloating
<item name="android:windowIsFloating">true</item>
true:dialog浮在activity上面,会使得windowFullScreen=true无效;整个layout会在屏幕的中心,标准的dialog样式
false:可以使得dialog的layout依据activity的content大小来展示,即展示出来的layout内容不再是整个屏幕的中心,而是在保留状态栏的情况下,依次排布dialog的layout;另外windowFullscreen要想实现全屏效果,也需要将windowIsFloating= false。
-
windowFullscreen
设置dialog是否全屏展示
只有设置了windowIsFloating=flase才可以使得windowFullScreen=true有效
当全屏其作用时,连状态栏都不会保留,,即状态栏的各种状态信息都看不到了。
-
windowNoTitle
false:保留一个类似状态栏的高度
true:将这个高度去掉
-
layout_gravity
当设置windowIsFloating = false时,可以控制整个Dialog内容的位置;
当true时,可以控制除title、button之外的Content的位置;
-
windowBackground
设置Dialog的背景以及inset边距(类似padding)
<item name="android:windowBackground">@drawable/dlg_bg_inset</item>
R.drawable.dlg_bg_inset
<?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetBottom="16dp" android:insetLeft="16dp" android:insetRight="16dp" android:insetTop="16dp"> <shape android:shape="rectangle"> <corners android:radius="2dp" /> <solid android:color="@color/white" /> </shape> </inset>
-
windowMinWidthMajor/windowMinWidthMinor
What is the difference between windowMinWidthMajor and android:windowMinWidthMajor
Min_witdh_major is:
The platform's desired minimum size for a dialog's width when it is along the major axis (that is the screen is landscape). This may be either a fraction or a dimension.
And min_with_minor is:
The platform's desired minimum size for a dialog's width when it is along the minor axis (that is the screen is portrait). This may be either a fraction or a dimension.
In appcompat, this value is set as 65%.
-
使得Dialog的高度根据内容视图高度进行auto适配
after Dialog show()
Window window = dialog.getWindow(); if (window != null) { window.setLayout(-1, -2); }
-
点击Dialog的Button后让Dialog不消失
Dialog的Button的点击事件默认中会使得Dialog dismiss。
可以在Dialog执行show()方法之后或者在onShowListener的回调中执行,,通过getButton()得到对应的Button,来重新设置Button的监听,这样就可以覆盖掉系统默认的dismiss操作了。
<style name="DlgFullScreenStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowFullscreen">true</item>
</style>
<style name="DlgFloatingStyle" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@color/bg_toast_or_dlg</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">false</item>
</style>
这个主题适用于 AppCompatActivity 与 Activity ,二者都可以实现效果
<style name="DialogTheme" parent="Theme.AppCompat.Light.Dialog">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowNoTitle">true</item><!--去除actionbar-->
<item name="android:windowIsTranslucent">true</item><!--让窗体透明-->
<item name="android:windowIsFloating">false</item><!--让窗体展示内容,跟随布局位置,而非强制居中-->
<item name="android:windowBackground">@android:color/transparent</item><!--让窗体背景透明-->
</style>
关于属性是否有android: 的命名空间
<item name="windowNoTitle">true</item>
<item name="android:windowNoTitle">true</item>
-
前者
当 activtiy 继承自 AppCompatActivity 时,起作用;而且style 继承关系有关;
与 Theme.AppCompat.Dialog,AppCompatAcivity 一套的
-
后者
当Activity 继承自android.app.Activity 时 起作用;
与 @android:style/Theme.Dialog 、 Activity 是一套的
网友评论