4

我需要以编程方式找出默认情况下使用哪个可绘制 Android 来呈现ProgressBar. 由于这取决于所使用的主题,因此我尝试了以下方法:

    TypedArray progressBarAttrs = context.getTheme().obtainStyledAttributes(
            new int[] { android.R.attr.indeterminateDrawable });
    progressDrawableId = progressBarAttrs.getResourceId(0, -1);

但这总是返回-1。

这是因为android.R.attr.indeterminateDrawable没有声明为可样式化的还是什么?有没有其他方法可以实现相同的目标?

4

2 回答 2

0

以下为我返回了一个drawable(反复试验,我当然不明白obtainStyledAttributes究竟是如何解决的):

 int[] attrs = new int[] { android.R.attr.indeterminateDrawable /* index 0 */};
 TypedArray ta = context.obtainStyledAttributes(android.R.style.Widget_ProgressBar, attrs);
 // ....
 ta.recycle();

但是,当将该drawable分配给progressBar时:

 progressBar.setIndeterminateDrawable(ta.getDrawable(0));

结果看起来不像默认的 ProgressBar 不确定微调器。它是 Android 微调器,但更大更厚。

我现在知道为什么了,但是请注意 Android 中的 ProgressBar.java,在检索到可绘制资源后,会对其进行处理:

drawable = tileifyIndeterminate(drawable);
setIndeterminateDrawable(drawable);
于 2013-04-05T16:52:49.957 回答
0

如果您需要,很高兴在星期一为您提供更多帮助(只是出去并注意到您的问题),

但是请在此处查看 Hackbods 的答案https://stackoverflow.com/a/2130528/726954以及她指向示例项目的链接,这将允许您从主题中提取样式资源。

于 2013-04-12T15:59:55.217 回答