我目前在启动画面上有一个活动。以下是我将主题应用于活动的方式:
<application
...
<activity
android:name=".activities.SplashActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
SplashTheme定义如下:
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:background">@drawable/splash_background</item>
</style>
splash_backround.xml定义如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap
android:src="@drawable/login_background"
android:tileMode="disabled" />
</item>
<item>
<bitmap
android:src="@drawable/login_siren"
android:tileMode="disabled"
android:gravity="bottom|center_horizontal" />
</item>
<item android:top="120dp">
<bitmap
android:src="@drawable/splash_welcome"
android:tileMode="disabled"
android:gravity="top|center_horizontal" />
</item>
我没有在我的SplashActivity类的onCreate()中调用setContentView(),因此显示的内容是SplashTheme设置的内容。
如果在Application.onCreate()上无法加载某些内容,我想要显示AlertDialog的情况已经出现。当我使用它来构建,创建和显示AlertDialog时,会显示启动画面。但是,当我显示AlertDialog时,它会从Activity的主题中分配背景。即使我为AlertDialog(通过android:alertDialogTheme或android:alertDialogStyle)定义了一个明确定义不同背景的自定义样式,它也会被活动定义的背景所推翻。结果,我将SplashTheme更改为以下内容:
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash_background</item>
</style>
这现在释放了对警报对话框背景的控制,因为我没有在我的Activity主题中明确设置android:background。但是,窗口背景不考虑状态栏(即背景也适用于状态栏下方)。因此,当启动画面转换到在其布局中使用相同背景的下一个活动时(由于考虑了状态栏),我得到了一些跳跃。所以,这个解决方案仍然没有按照我的意愿运作。
如果我使用原始的SplashTheme(我在其中定义android:background),有没有办法覆盖主题定义的android:后台的AlertDialog?
答案 0 :(得分:0)
应用后,无法更改活动主题。
有没有办法覆盖主题为
android:background
定义的AlertDialog
?
AlertDialog
有一个构造函数,它接受themeResId
作为输入。来自docs of AlertDialog (Context context, int themeResId)
:
创建一个使用显式主题资源的警告对话框。
创建自定义主题,覆盖android:background
属性,然后使用新创建的主题创建AlertDialog
:
Dialog dialog = new AlertDialog(context, R.style.my_dialog_theme);