有用的Android系统资源

Posted

技术标签:

【中文标题】有用的Android系统资源【英文标题】:Useful Android system resources 【发布时间】:2011-02-07 13:05:26 【问题描述】:

android 附带大量系统资源 (android.R),可用于节省您的时间并使您的应用程序更轻巧。

例如,我最近发现 Android 为 Yes (android.R.string.yes)、No (android.R.string.no)、Cancel (android.R.string.cancel) 和 Ok (android.R.string.ok) 等字符串提供了本地化字符串。

您推荐使用哪些其他系统资源?还是有理由避免使用系统资源?

编辑:正如 Tomas 所指出的,其中一些资源可能不会产生您期望的结果(特别是,android.R.string.yes/no 返回 OK/Cancel 而不是 Yes/No,正如报告的 here)。为了更好地控制,您可以从 Android 源代码中复制系统资源。

【问题讨论】:

如何从 xml 访问这些? “或者是否有理由避免使用系统资源?” - 如果您使用图标等系统资源,不保证所有版本的 android 都可以使用相同的图标,这可能会导致您的应用不一致。 投票结束,因为过于广泛/基于意见。 【参考方案1】:

您可以在android package 中找到所有系统资源的完整列表。

每次我想在 Android 上做某事时,我都会检查是否有系统资源可以满足我想要做的事情。在搜索您可能需要的已经实现的资源时,导入 Android 源代码(特别是 their /res/ folder)会很有帮助,这样您就可以看到它们的具体实现。

就个人而言,我发现自己最常使用:

用于标准任务的内置 Android 布局,例如微调器下拉菜单。 Android ids (android.R.id),因为如果你想使用 Android 的一些小部件,你经常需要使用这些(例如,TabHost/TabWidget 要求你使用“android:id/tabhost”、“android:id/tabs”和“android:id/tabcontent”,如果你想实现 XML 布局)。 内置颜色,尤其是android.R.color.transparentandroid.R.anim 中的 Android 内置淡入淡出动画。

【讨论】:

请记住,这些资源随您的 SDK 一起提供。查看特定平台目录下的data/res/ 目录。我会小心重用可能会被 OEM 更改的东西——可绘制资源将是一个示例问题区域。 @CommonsWare 在实际设备上运行时,从哪里加载资源? @ThomasW:除了“设备固件中的某处”之外,我不能说,因为我从来没有去寻找细节。对不起! 哇。有些地方甚至 @CommonsWare 都没有涉足。 @ThomasW 资源从 resources.arsc 文件加载。当您构建您的 apk 时,aapt 会编译您的资源并生成 resources.arsc 文件,该文件包含在 apk 中。【参考方案2】:

您可以通过 xml 中的 access system resources 使用 android 包名称来限定它们,即 "@android:string/ok"

【讨论】:

【参考方案3】:

正如 CommonsWare 所提到的,您不必下载 Android 源代码库来检查资源;只需转到<android-sdk-dir>/platforms/android-X.X/data/res/。但是,如果您开始使用这些,您很快就会失望地发现它们中的大多数可通过android.R 类获得。大多数时候,无论如何我都必须将它们导入到我的 Eclipse 工作区中。 :-(

我最喜欢的资源是根据控件的聚焦/按下/禁用状态(如 android.R.drawable.btn_default)以不同方式显示的可绘制对象。我使用这些或调整它们来为我的应用程序创建自定义按钮。如您查看/data/res/drawable/btn_default.xml 所见,它们被定义为<selector> XML 元素,该元素在运行时膨胀为StateListDrawable。您还可以创建自己的 StateListDrawables,它们非常有用,既可以用作视图背景,也可以用作按钮的“复合可绘制对象”(参见 TextView.setCompoundDrawables())。

【讨论】:

我想知道,在实际设备上运行时,资源是从哪里加载的?【参考方案4】:

请注意,翻译真的很糟糕。

例如,android-25 中的德语“no”是“Abbrechen”,实际上是“取消”的意思。 “是”翻译成“OK”……

我不确定其他语言有多好,所以我会使用自己的翻译。

【讨论】:

不是翻译不好。正如 OP 在他的问题中指出的那样,android.R.string.yes/no 返回OK/Cancel 而不是Yes/No。这可能是因为开发者认为android.R.string.yes/noandroid.R.string.ok/cancel 更简洁。 另外,android.R.string.ok 似乎没有被翻译。我测试过的每种语言都“OK”。 (对于某些语言,“OK”是不合适的。)

以上是关于有用的Android系统资源的主要内容,如果未能解决你的问题,请参考以下文章

如何为Android系统添加一个新的资源包

gcc的替换,很有用

Android系统资源图标android.R.drawable

Delphi XE8中Android开发有用的资源!

Android 添加framework资源包

android 垃圾回收机制