不同主题的PNG导致InflateException

时间:2019-11-20 09:32:26

标签: android

我有一个具有两个不同颜色主题(深色和浅色主题)的应用程序。在我的应用程序的一部分中,我将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-mdpivalues-hdpivalues-xhdpi中提供此png。

values-xxhdpi

我对不同颜色的矢量可绘制对象也做同样的事情,效果很好。我不知道为什么它不适用于PNG。

更新 我刚刚意识到这并非在所有设备上都发生。我已经在我的Huawei P9 lite API 24(真实硬件)上尝试过它,但是它崩溃了,但是在10.1 WXGA API 22(AVD)上却可以工作。

1 个答案:

答案 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>