使用Android内部可绘制对象

5

我正在尝试编写一个三态开关,但是我无法访问默认的com.android.internal.R.styleable.Switch_track可绘制对象作为背景。

如何获取该可绘制对象?

是否有其他方法可以获取默认背景?

2个回答

5

仅供参考: 虽然不建议访问内部资源,你应该知道它们可能会因为厂商或操作系统更新而更改或被删除,但是在运行时访问它们是可能的:

int id = Resources.getSystem().getIdentifier("Switch_track", "styleable", "android");

这是不正确的。getIdentifier返回一个整数,而styleable是一个整数数组。我相信唯一的方法是使用反射https://dev59.com/XWvXa4cB1Zd3GeqPOe81#13841530 - charliebeckwith
抱歉,更正一下,styleable 有时是一个整数数组。 - charliebeckwith

5

您不应访问私有资源,因为您无法确保该资源在所有设备上都可用。即使它可用,您也无法确定它是否相同。

如果您想使用私有资源,您必须从SDK或Android源代码中将其复制到项目资源中。


好的,听起来很合理。但我在源代码中也找不到 Switch_track drawable.. 你呢? - Angelo.Hannes
你不会找到 Switch_track,这个名称表示 Switch 小部件具有 android:track 属性。然后你可以在 styles.xml 中找到该属性引用的可绘制对象,例如 switch_track_holo_light(这取决于主题)。 - Tomik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接