资源返回错误类型的Drawable

我有一个应用程序与三个ProgressBars ,每个都有自己的自定义进度Drawable 。 这些Drawable非常简单 - 每个都是具有透明背景图层,透明辅助进度图层和纯色进度图层的LayerDrawable

所有三个ProgressBars都以相同的布局显示。

我开始遇到的问题是其中一个ProgressBars无法正确显示 - 它不会显示任何进度。 这只发生在某些设备上(在运行2.3.3的仿真Nexus One和运行4.1.2的Galaxy SII上确认)。

我在onCreate放置了一个断点,并发现前两个ProgressBarsmProgressDrawable属性正确设置为LayerDrawable ,但第三个设置为ColorDrawable

果然,下面的代码返回两个LayerDrawables和一个ColorDrawable

    Drawable blueDrawable  = getResources().getDrawable(R.drawable.progress_blue);
    Drawable redDrawable   = getResources().getDrawable(R.drawable.progress_red);
    Drawable greenDrawable = getResources().getDrawable(R.drawable.progress_green);

无论我在哪里移动布局和代码中的第三个ProgressBar ,或者尝试围绕progressDrawable属性进行交换,引用我的第三个XML DrawableColorDrawable不会显示进度并给我一个ColorDrawable

有趣的是,我发现只需在我的可绘制文件夹中创建一个新的XML文件就可以解决问题。 这导致我相信Android正在打包或加载资源的方式存在问题,但我无法弄清楚如何识别和纠正根本问题。

我也不能在新的应用程序中重现问题。

我怎样才能继续追查这个问题的根源呢?

progressDrawable XML:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@android:id/background">
        <shape>
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <solid android:color="@android:color/transparent" />
            </shape>
        </clip>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <solid android:color="@color/myapp_green" />
                <!-- The other two drawbles only change this color -->
            </shape>
        </clip>
    </item>

</layer-list>

colors.xml:

<resources>
    <color name="myapp_red">#dd514c</color>
    <color name="myapp_green">#5eb95e</color>
    <color name="myapp_blue">#0e90d2</color>
</resources>

更新移动progressDrawable属性

  • 红色,蓝色,绿色:3号破损
  • 红色,绿色,绿色:2号和3号被打破
  • 蓝色,绿色,红色:2号破损
  • 蓝色,红色,蓝色:所有的工作
  • 绿色,绿色,绿色:所有的工作
  • 绿色,绿色,红色:所有的工作
  • 绿色,蓝色,红色:所有的工作

  • 如果您更改订单,请从:

    Drawable blueDrawable  = getResources().getDrawable(R.drawable.progress_blue);
    Drawable redDrawable   = getResources().getDrawable(R.drawable.progress_red);
    Drawable greenDrawable = getResources().getDrawable(R.drawable.progress_green);
    

    例如:

    Drawable redDrawable   = getResources().getDrawable(R.drawable.progress_red);
    Drawable greenDrawable = getResources().getDrawable(R.drawable.progress_green);
    Drawable blueDrawable  = getResources().getDrawable(R.drawable.progress_blue);
    

    比还是greenDrawable的问题还是第三的位置(blueDrawable)?


    如果你甚至没有看到进度条,也许你有一个明亮的背景卡住了某个地方?

    尝试将style属性设置为:

    style="@android:style/Widget.ProgressBar.Inverse"
    
    链接地址: http://www.djcxy.com/p/19285.html

    上一篇: Resources returns a Drawable of the wrong type

    下一篇: Sprockets::FileNotFound couldn't find file 'jquery'