### Android资源与应用国际化 #### 一、源和资产(Resources and Assets) 在Android开发中,资源(Resources)和资产(Assets)是两个重要的概念。它们主要用于存储应用中的各种静态数据,如图片、音频文件、布局文件等。 **资源(Resources)**是指Android框架可以直接访问的数据文件,这些文件通常放在`res`目录下。资源可以通过资源ID直接访问,而且可以在编译时进行优化处理,例如压缩图片等。资源文件包括以下几种类型: - **颜色**:定义应用中的颜色值。 - **字符串与风格**:定义应用中的文本和样式。 - **图片资源**:包括位图和其他类型的图像文件。 - **Nine-patch(被拉伸或缩小的图像)**:特殊的图像格式,支持自动缩放。 - **菜单**:定义应用的菜单项。 - **Layout布局**:定义用户界面的布局结构。 - **用户的布局资源**:用户自定义的布局文件。 - **风格和主题(Styles and Themes)**:定义应用的整体外观和感觉。 **资产(Assets)**则是指那些不经过编译处理的原始文件,一般放在`assets`目录下。资产文件可以是任何类型,比如文本文件、数据库文件等。资产文件不会被编译成资源ID,而是通过AssetManager类来访问。 #### 二、Android中可用的资源类型 1. **颜色**:用于定义应用中的颜色值,例如背景色、字体颜色等。颜色资源文件位于`res/values/colors.xml`中。 ```xml <resources> <color name="colorPrimary">#3F51B5</color> <color name="colorAccent">#FF4081</color> </resources> ``` 2. **字符串与风格**:字符串资源用于存储应用中的文本内容,而风格资源则用于定义文本的样式。这些资源文件通常位于`res/values/strings.xml`和`res/values/styles.xml`中。 - **字符串** ```xml <resources> <string name="app_name">My App</string> </resources> ``` - **风格** ```xml <resources> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources> ``` 3. **使用有风格的有格式的字符串**:可以将样式应用到字符串资源中,例如加粗、斜体等。 ```xml <resources> <string name="welcome_message"><b>Welcome to my app!</b></string> </resources> ``` 4. **图片资源**:包括位图和其他类型的图像文件,通常存储在`res/drawable`目录下。 5. **图片的颜色**:除了普通的位图资源外,还可以使用颜色过滤器对图像进行颜色处理。 6. **Nine-patch(被拉伸或缩小的图像)**:这是一种特殊的图像格式,允许图像在保持比例的同时被拉伸或缩小,非常适合制作可适应不同屏幕尺寸的应用按钮。 ```xml <nine-patch xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/button_normal" android:dither="true"> <shape android:shape="rectangle"> <solid android:color="#FFFFFF"/> <corners android:radius="4dp"/> </shape> </nine-patch> ``` 7. **菜单**:定义应用的菜单项,通常位于`res/menu`目录下。 ```xml <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_settings" android:orderInCategory="100" android:title="@string/action_settings" app:showAsAction="never" /> </menu> ``` 8. **Layout布局**:定义用户界面的布局结构,通常位于`res/layout`目录下。 ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_text" /> </LinearLayout> ``` 9. **用户的布局资源**:用户可以自定义布局文件,以便于更灵活地设计用户界面。 10. **风格和主题(Styles and Themes)**:定义应用的整体外观和感觉,包括背景颜色、字体大小等。这些设置位于`res/values`目录下的`styles.xml`文件中。 #### 三、Resources and Internationalization(资源和国际化) **资源和国际化**是指利用Android框架中的资源系统来支持多语言和地区。这不仅包括文字的翻译,还包括货币符号、日期格式、数字格式等文化差异方面的考虑。 1. **介绍(Introduction)**:国际化(Internationalization)是指让一个应用能够在多种语言和文化环境中运行,而本地化(Localization)则是针对特定地区进行的定制。 2. **创建资源(Creating Resources)**:为了支持不同的语言和地区,需要为每种语言创建相应的资源文件夹。例如,为了支持英语(美国),可以在`res`目录下创建`values-en-rUS`目录;对于简体中文,则创建`values-zh-rCN`目录。 3. **全局资源的声明(Global Resource Notes)**:通常情况下,应用会有一个默认的资源文件夹`values`,这里存放的是通用的资源文件,其他语言版本的资源文件夹中的文件会覆盖这里的设置。 4. **使用资源(Using Resource)**:可以通过`R`类来访问资源,例如: ```java String appName = getString(R.string.app_name); ``` 5. **在代码中使用资源(Using Resources in Code)**:在Java代码中,可以使用`getResources()`方法来获取资源对象,然后使用该对象来访问资源。 6. **引用资源(References to Resources)**:在XML布局文件中,可以使用`@`符号后跟资源ID来引用资源。 7. **引用主题属性(References to Theme Attributes)**:当需要引用主题中的属性时,可以使用`?`符号后跟属性名。 8. **使用系统资源(Using System Resources)**:Android提供了一些内置的主题和样式,可以通过`Theme`和`Style`类来使用。 9. **替代资源(替代语言和配置)Alternate Resources (for alternate languages and configurations)**:为了支持不同的语言和地区,可以在不同的资源文件夹中放置相同的资源文件名,但是内容不同。 10. **Android如何找到最佳目录(How Android finds the best directory)**:当应用启动时,Android会根据设备的当前语言和地区设置选择最合适的资源文件夹。如果找不到匹配的资源,则使用默认资源文件夹中的资源。 #### 四、本地化你的Android应用程序 本地化应用程序是一项复杂但非常重要的任务,它可以让应用更好地服务于全球用户。以下是实现本地化的一些关键步骤: 1. **确定支持的语言和地区**:首先明确应用需要支持哪些语言和地区。 2. **创建资源文件夹**:为每种语言创建对应的资源文件夹,并将翻译后的资源文件放入其中。 3. **使用正确的命名规则**:资源文件夹的命名应该遵循Android的规定,例如`values-en`表示英语资源文件夹。 4. **翻译资源文件**:将字符串、日期格式等资源翻译成目标语言。 5. **测试**:确保在每种语言和地区设置下应用都能正常运行。 6. **使用Android Localization Helper**:这是一个辅助工具,可以帮助开发者更轻松地管理多语言资源文件。 #### 五、在Android中轻松实现横竖屏的布局 在Android应用中,横竖屏切换是一个常见的场景。为了更好地适配不同方向的屏幕,可以采用以下方法: 1. **使用布局权重(Layout Weights)**:通过设置视图的`android:layout_weight`属性来控制视图在容器中的占比,这样可以在不同方向下自动调整布局。 2. **使用约束布局(ConstraintLayout)**:约束布局可以根据父容器的大小动态调整子视图的位置和大小。 3. **使用相对布局(RelativeLayout)**:相对布局可以定义视图之间的相对位置,有助于在不同方向下保持一致的布局效果。 4. **使用资源限定符(Resource Qualifiers)**:可以通过创建不同的布局文件来支持横竖屏切换,例如创建`layout-land`和`layout-port`两个文件夹。 #### 六、如何获取当前Locale,设定Locale 1. **获取当前Locale**:可以通过`Context`对象的`getResources().getConfiguration().locale`方法来获取当前的`Locale`对象。 2. **设定Locale**:可以通过`setConfiguration()`方法更改配置文件中的`Locale`设置,进而改变应用的语言环境。 ```java // 获取当前Locale Locale currentLocale = getResources().getConfiguration().locale; // 设置新的Locale Locale newLocale = new Locale("zh", "CN"); Resources res = getResources(); Configuration config = res.getConfiguration(); config.setLocale(newLocale); res.updateConfiguration(config, res.getDisplayMetrics()); ``` #### 七、如何在代码中强行指定自己App的locale 有时候,可能需要强制指定应用使用的语言环境,而不是跟随系统的设置。可以通过修改配置文件中的`Locale`设置来实现这一点。 ```java Locale forcedLocale = new Locale("en", "US"); Resources res = getResources(); Configuration config = res.getConfiguration(); config.setLocale(forcedLocale); res.updateConfiguration(config, res.getDisplayMetrics()); ``` #### 八、Android Applications Localization Helper (Android 本地化助手) **Android Applications Localization Helper**是一款辅助工具,可以帮助开发者更轻松地管理和维护多语言资源文件。它提供了以下功能: - **资源文件比较**:快速比较不同语言版本的资源文件,找出未翻译的部分。 - **资源文件同步**:自动同步资源文件,保持各个版本的一致性。 - **资源文件生成**:自动生成新的资源文件,减少手动操作的工作量。 通过使用这样的工具,可以显著提高本地化工作的效率,确保应用能够更好地服务于全球用户。 总结来说,Android应用的国际化和本地化是一个多方面的工作,涉及到资源管理、布局调整、语言和文化适应等多个环节。通过合理规划和使用适当的工具,可以有效提升应用的质量和用户体验。
- xsclml2222013-03-13分析很详细,资料很详细
- xiao_System2019-06-04不错,谢谢分享
- LiveOnHope2012-08-01干货,有内容,大家可以下下来参考一下
- bai123love2013-05-31很好,内容很详细,说得很明白,经过实验,可以了。
- 粉丝: 0
- 资源: 12
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助