MGI 手段 它们是Android应用程序的基本组成部分。 只要有可能 我们将它们与代码分开这样,我们将实现更易于维护的应用程序。 如果我们组织得当,Android还将根据配置(通常是屏幕尺寸和用户的语言)为我们选择合适的元素。
基本资源:图像和文本
MGI 文本 它们必须始终与代码分开。 如果不这样做,维护代码将使我们付出更多的代价:我们将不得不审查所有事件,并且每次都必须进行更改时,我们可能会忘记一些事件。 最糟糕的是,我们的应用程序将无法国际化。
因此,不建议将文本放入代码中。 唯一的例外可能是不适合最终用户使用的消息,例如控制台输出消息。 但总的来说,我们所有的文本都必须放在 单独的资源文件。 我们将调用该文件 字符串.xml,那么您在项目中的完整路径将是 res / values / strings.xml.
一个strings.xml文件将具有类似于以下内容:
<资源>绳子 名称=“字符串_1">文本1 <绳子 名称=“字符串_2">文本2
现在,在我们的代码中,我们可以使用诸如getResources()。GetString(R.string.string_1)之类的句子,或在我们的布局(如@ string / string_1)中检索这些文本。 通过这种方式,我们实现了我们想要的:代码变得与资源无关。
我们将定期使用的其他资源是 图像。 为此,我们在项目中有几个文件夹,例如res / drawable,res / drawable-hdpi,res / drawable-xhdpi等。
“ drawable”后面的后缀是指 屏幕密度。 每个Android设备在每个屏幕上的像素密度都分为几组:
- ldpi(小x0,75)
- mdpi(平均x1)
- hdpi(大x1,5)
- xhdpi(超大x2)
- xxhdpi(超大x3)
这样,相同的图像可以适应 不同的屏幕密度 没有出现畸形。 建议您在每个文件夹中都有一个图像副本,并遵守比例(以mdpi为基数并等于1),尽管您也可以只使用其中一个,然后Android会自动对图像进行缩放操作其他决议。 但是,建议覆盖所有文件夹,以节省系统额外的精力。
“可绘制”文件夹将不包含图像,我们仅将其用于高级元素(例如选择器)的xml定义。
OTROS RECURSOS
在项目的/ res目录中可以包含更多资源。 声音,颜色定义(类似于文本),应用程序的尺寸,视图的样式等等。
对于那些有兴趣进一步了解这些资源的人,可以咨询 官方的Android文档.
Android的国际化
借助图像,我们已经对 Android上的替代资源系统:如果我们有xhdpi密度屏幕(例如,Galaxy S3的屏幕),则Android会优先选择drawable-xhdpi目录中的图像。
该系统可用于区分许多其他配置:法线或横向,驾驶或法线模式,夜间或法线模式...同样,我们建议 官方的Android文档 知道所有细节。 我们已经讨论过如何根据屏幕的密度提供图像,现在我们将重点介绍应用程序的另一个非常重要的用途: 国际化.
如果我们希望以多种语言提供文本,则必须为strings.xml文件的每个副本添加一个不同的文件夹。 因此,如果我们要将应用程序移植到英语和法语,则将具有以下三个目录:
- res /值(默认值)
- res /值-en
- res /值-fr
也就是说,将具有特定语言的ISO代码后缀的文件夹添加到该文件夹中,并且我们会将默认文本保留在该文件夹中而没有后缀。 后者非常重要,因为除了屏幕密度外,我们总是必须给 预设值 所有资源。 当我们需要任何类型的资源时,Android会寻找最合适的资源,如果找不到任何资源,我们会发现应用程序意外关闭。 这就是为什么必须始终存在默认情况下我们选择的语言,并且所有资源都具有其默认值的原因。
通过这种方式,我们再次得到了想要的东西:除了将文本与代码分离之外,我们现在还可以 不同语言的应用 根本不用碰我们的代码。
当然,生成替代资源的系统是可组合的。 遵循我们之前指出的链接,我们将看到后缀按什么顺序排列。 如果遵循本教程中指示的简单示例,则可以考虑使用仅适用于英文版本的图像。 这是通过创建文件夹res / drawable-en-xhdpi或我们需要的任何其他屏幕密度来实现的。 这样,我们可以提供各种各样的资源,而不必担心选择正确的资源。 当然:不要忘记屏幕密度是唯一不需要默认值的修改器。 其他所有都需要一个默认值,否则我们有可能导致应用程序崩溃。