在运行时从 Android 主题获取默认属性值



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

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

但这总是返回 -1。

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

下面为我返回一个可绘制对象(反复试验,我当然不明白 gettainStyledAttributes 是如何解决的):

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

但是,将该可绘制对象分配给进度条时:

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

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

我现在知道为什么了,但请注意 Android 中的 ProgressBar .java在检索可绘制资源后,对它做了一些事情:

drawable = tileifyIndeterminate(drawable);
setIndeterminateDrawable(drawable);

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

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

相关内容

  • 没有找到相关文章

最新更新