Dialog的style

作者: 钦_79f7 | 来源:发表于2019-12-19 12:48 被阅读0次
  • 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 是一套的

参考

相关文章

网友评论

    本文标题:Dialog的style

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