我需要以编程方式找出Android默认使用哪个可绘制的呈现ProgressBar
。由于这取决于所使用的主题,我尝试了以下几点:
TypedArray progressBarAttrs = context.getTheme().obtainStyledAttributes(
new int[] { android.R.attr.indeterminateDrawable });
progressDrawableId = progressBarAttrs.getResourceId(0, -1);
但这总是返回-1。
这是因为android.R.attr.indeterminateDrawable
未被声明为可设置样式吗?还有其他方法可以达到同样的目的吗?
答案 0 :(得分:0)
以下为我返回一个drawable(试错,我当然不明白getsStyledAttributes如何解析):
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);
答案 1 :(得分:0)
如果您需要,可以在周一给您更多帮助(只需前往并注意到您的问题),
但请查看Hackbods在这里回答https://stackoverflow.com/a/2130528/726954以及她对Sample项目的链接,该项目允许您从主题中提取样式资源。