我有一个很常见的要求。
我有一个活动需要在移动设备上显示全屏(大小正常),以及平板电脑设备上的对话框(尺寸大和尺寸XLarge)。
在这两种格式中,我都在活动的内容视图中显示了UI-Widgets,例如Horizontal-ProgressBar,Circular-ProgressBar作为载荷指示器等,需要遵循一致的Material-Design和Custom - 品牌颜色等我不能放弃这个要求。
我已经根据默认的Android主题和样式定义了自定义样式,并在App中为所有活动使用它们。以下是自定义主题。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:colorPrimary" tools:ignore="NewApi">
@color/light_black
</item>
<item name="colorPrimary">@color/light_black</item>
<item name="android:colorAccent" tools:ignore="NewApi">@color/sapphire</item>
<item name="colorAccent">@color/sapphire</item>
<item name="android:colorBackground">@color/primary_background</item>
<item name="android:textColorPrimary">@color/title_color</item>
<item name="android:colorButtonNormal" tools:ignore="NewApi">@color/sapphire</item>
<item name="colorButtonNormal">@color/sapphire</item>
<item name="android:colorForeground" tools:ignore="NewApi">
@color/title_color
</item>
<item name="android:titleTextStyle">@style/toolbar_title</item>
<item name="android:navigationIcon" tools:ignore="NewApi">?android:attr/homeAsUpIndicator</item>
<item name="navigationIcon">?android:attr/homeAsUpIndicator</item>
<item name="android:colorControlNormal" tools:ignore="NewApi">@color/white</item>
<item name="colorControlNormal">@color/white</item>
</style>
<style name="AppTheme.Light" parent="AppTheme">
<item name="android:windowBackground">@color/white</item>
</style>
<style name="AppTheme.Dialog" parent="AppTheme.Light">
<item name="android:windowBackgroundFallback" tools:ignore="NewApi">
@android:color/transparent</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:colorBackgroundFloating" tools:ignore="NewApi">
@android:color/transparent</item>
<item name="windowActionBar">false</item>
<item name="windowActionBarOverlay">false</item>
<item name="windowActionModeOverlay">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowClipToOutline" tools:ignore="NewApi">false</item>
<item name="android:windowTitleStyle">@null</item>
<item name="android:windowTitleBackgroundStyle">@null</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowCloseOnTouchOutside">true</item>
<item name="android:windowEnableSplitTouch">true</item>
<item name="android:fitsSystemWindows">true</item>
<item name="android:fillViewport">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.2</item>
</style>
我将AppTheme用作应用程序中所有活动的默认主题,并将AppTheme.Dialog用于上述仅适用于平板电脑设备的特定活动。活动确实显示为平板电脑屏幕中心的浮动对话框窗口,当像一个典型的对话框一样触摸外面时解散,一切都很好,但问题是活动的窗口背景就像墨水黑色
我的要求是,平板电脑设备中作为浮动对话框的活动应该有一个透明背景,展示之前的活动窗口 - 内容可能会变暗和变暗。
如何实现这一点,而不必使用Theme.Dialog或Theme.Translucent,正如我之前所说,我需要UI-Widgets的Material-Design规范不要改变原来的#34; AppTheme&# 34;风格。
我还需要重用Activity类中声明的许多自定义私有方法,因此将内容视图布局文件加载到Dialog实例中绝对不是首选。
哦,顺便说一下,compileSdkVersion是最新的24,minSdkVersion是16,targetSdkVersion是24,buildToolsVersion也是最新的24.0.1,但这完全是另一个问题。
答案 0 :(得分:1)
使用Dialog
创建透明主题。
示例:
Dialog alertDialog = new Dialog(this);
alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
alertDialog.setContentView(R.layout.tabs);
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
alertDialog.show();
注意:AlertDialog
构建器实际上不适合设计透明对话框,并且总是会有这个黑色背景,实际上是它的主题。
答案 1 :(得分:0)
如果您正在使用片段,请记住不要替换新片段,而是将其添加到上一片段之上,并将背景颜色定义为透明主题。
如果您正在使用活动,只需使用透明主题背景作为您正在使用的活动或对话框。
答案 2 :(得分:0)
所以,我终于想通了。 我已将“AppTheme.Light”声明为同一个Activity的Android Manifest中的默认主题,因为它应该在移动设备中显示全白屏幕背景,而同一个Activity应该显示为平板设备中的浮动对话,所以我在活动的生命周期内将主题“以编程方式”设置为AppTheme.Dialog。
我应该反过来做同样的事情。我应该在Tablet设备的Android清单文件中声明适用的主题,并在设备屏幕大小为正常或小时将所有这些浮动对话框属性重写为全屏布局模式。