我有一个具有两个不同颜色主题(深色和浅色主题)的应用程序。在我的应用程序的一部分中,我将png用作小部件的背景,这两个主题中的颜色应该不同。
styles.xml:
if($_REQUEST['auth_key']!='12345') {
header("Location: deny.php");
die;
}
attrs.xml:
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
</style>
<style name="AppTheme.DARK" parent="AppTheme">
<item name="my_png">@drawable/my_png_theme_dark</item>
<item name="my_png2">@drawable/my_png2_theme_dark</item>
</style>
<style name="AppTheme.DARK" parent="AppTheme">
<item name="my_png">@drawable/my_png_theme_light</item>
<item name="my_png2">@drawable/my_png2_theme_light</item>
</style>
</resources>
drawable / my_background.xml:
<resources>
<attr name="my_png" format="reference"/>
<attr name="my_png2" format="reference"/>
</resources>
layout / my_activity.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?attr/my_png" android:state_checked="true"/>
<item android:drawable="?attr/my_png2" android:state_checked="false"/>
</selector>
我在<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/my_checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/my_background"
android:background="@android:color/transparent"/>
</LinearLayout>
,values-mdpi
,values-hdpi
和values-xhdpi
中提供此png。
values-xxhdpi
我对不同颜色的矢量可绘制对象也做同样的事情,效果很好。我不知道为什么它不适用于PNG。
更新 我刚刚意识到这并非在所有设备上都发生。我已经在我的Huawei P9 lite API 24(真实硬件)上尝试过它,但是它崩溃了,但是在10.1 WXGA API 22(AVD)上却可以工作。
答案 0 :(得分:0)
我自己找到了解决方案。我不知道是什么引起了异常,但这可以工作:
attrs.xml
:
<resources>
<attr name="my_background" format="reference"/>
</resources>
styles.xml
:
<resources>
<style name="AppTheme.LIGHT" parent="AppTheme">
<item name="checkbox_background">@drawable/my_background_theme_light</item>
</style>
<style name="AppTheme.DARK" parent="AppTheme">
<item name="checkbox_background">@drawable/my_background_theme_dark</item>
</style>
</resources>
drawable/my_background_theme_light
:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/my_png1_theme_light" android:state_checked="true"/>
<item android:drawable="@drawable/png2_theme_light" android:state_checked="false"/>
</selector>
drawable/my_background_theme_dark
:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/my_png1_theme_dark" android:state_checked="true"/>
<item android:drawable="@drawable/png2_theme_dark" android:state_checked="false"/>
</selector>