我有一个包含三个ProgressBars
的应用,每个应用都有自己的自定义进度Drawable
。这些Drawable非常简单 - 每个都是LayerDrawable
,具有透明背景图层,透明辅助进度图层和纯色进度图层。
所有三个ProgressBars
都以相同的布局显示。
我开始遇到的问题是其中一个ProgressBars
未正确显示 - 它根本不显示任何进度。这只发生在某些设备上(在运行2.3.3的模拟Nexus One和运行4.1.2的Galaxy SII上确认)。
我在onCreate
中放了一个断点,发现前两个ProgressBars
将mProgressDrawable
属性设置为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 Drawable
的属性都没有显示进度并给了我一个ColorDrawable
。
有趣的是,我发现只需在我的drawable文件夹中创建一个新的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
属性
答案 0 :(得分:3)
如果您更改了订单,请执行以下操作:
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)?
答案 1 :(得分:0)
如果你甚至没有看到进度条,也许你的某个地方有一个明亮的背景?
尝试将style属性设置为:
style="@android:style/Widget.ProgressBar.Inverse"