使用系统中的图标与将其复制到项目中

Com*_*ish 1 android

对于常见的Android图标(例如上下文菜单图标),我通常会将标准的Android图标复制到我的项目中.我最近意识到你也可以从系统中获取这些图标android.R.drawable.blablabla.所以我的问题是,有没有理由更喜欢一种方法而不是另一种方法?

如果使用系统更好,你如何用XML访问它们?

谢谢!

tha*_*sma 7

您可以通过添加'@android'来访问它们,即:

<Image android:src="@android:drawable/ic_menu_add" android:layout_height="wrap_content" android:layout_width="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)

如果使用系统资源,您将无法控制资源的确切外观.您将在当前设备上安装ressource,并且在整个设备,制造商和Android版本中有所不同.

  • 这是全有或全无.如果您使用的是系统提供的所有图标,则可以确保设备上的所有应用都具有一致的外观.如果您主要使用系统提供的图标和一些您自己设计的图标......那么,适合使用什么设备?如果您对某些项目使用自定义图标,则确保外观一致的唯一方法是为所有项目使用自定义图标. (2认同)

tre*_*fer 6

参考系统图像

一般的建议是参考系统的图像在可能的情况

  • GOOD:将匹配操作系统级别(某些图标在迭代期间发生变化)
  • 好的:将与股票用户界面和自定义主题配合得很好
  • 好的:无需显示Apache2许可证(IANAL)
  • 坏:可能会打破你的应用程序的外观
  • 不好:仅限官方出口图片

正如您所看到的,这两种解决方案都有缺点.例如,您可以使用黑白浏览器图标来表示浏览器的链接.图标未正式导出,因此您需要复制它.但在这种情况下,您必须遵守所用艺术品的许可.这包括对Android开放源代码项目创建的内容的归属(有关详细信息,请参阅许可证文件的副本)

在XML中的用法

您始终可以使用android:前缀来引用应用中的系统图标.一个例子是

@android:drawable/ic_menu_add
Run Code Online (Sandbox Code Playgroud)

这也适用于字符串和其他资源,例如"OK"文本.