当前位置: 首页 > news >正文

Android中的资源与国际化!

Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示:

 

我们主要看一下layout与values目录,layout里的xml文件的我们应用使用布局的文件,values里的sring.xml是用来存放文字资源,一个key对应一个value值。

但是在实际应用开发中,通常横屏(land)与竖屏(port)可能布局文件有所不同,这时候我们可以独自定义横屏与竖屏的布局文件( 文件名字要一样),默认情况是加载layout目录里的布局文件。同样应用还要支持不同的语言,如果我们应用里没有定义手机所用语言的资源时,会默认加载values的值。

为了方便大家理解下面做个简单的Demo.具体步骤如下:

第一步:新建一个Android工程,命名为ResourceDemo。

我们看一下layout目录下的自动生成的main.xml布局文件,代码如下:

 

 

[java]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:text="@string/hello"  
  11.     />  
  12. </LinearLayout>  

 

其中我们程序显示的文本内容是在values/string.xml文件中对应的hello的值,代码如下:

 

[java]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, ResourceDemo!</string>  
  4.     <string name="app_name">ResourceDemo</string>  
  5. </resources>  

 

运行效果如下图所示:

port(竖屏模式)效果:

Ctrl+F11快捷键模拟器变成横屏(land)模式:

 

第二步:我们定义land与port模式的布局文件,即在res/目录下创建layout-land与layout-port两个文件夹,目录结果如下所示:

layout-land目录下main.xml和layout内容基本一样,只是显示内容不同,代码如下:

 

[java]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:text="@string/land"  
  11.     />  
  12. </LinearLayout>  

 

同理layou-port目录下main.xml代码如下:

 

[java]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <TextView    
  8.     android:layout_width="fill_parent"   
  9.     android:layout_height="wrap_content"   
  10.     android:text="@string/port"  
  11.     />  
  12. </LinearLayout>  

 

当然我们显示的内容是在values/string.xml文件里定义的,这里加了两个值,代码如下:

 

[java]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, ResourceDemo!</string>  
  4.     <string name="app_name">ResourceDemo</string>  
  5.     <string name="land">This is land mode.</string>  
  6.      <string name="port">This is port mode.</string>  
  7. </resources>  

 

然后再次运行程序,效果如下:

竖屏(port)效果:

横屏(land)下效果:

 

通过上面例子可以得出如果我们已经定义了横屏与竖屏布局文件时,就不会在加载layout里的同名布局文件。

 

下面我们来讲点国际化,通常国际化我们只要在res/目录下在重新定义values-国家编号,如values-zh-rCN简体汉语,values-zh-rTW繁体,values-jp日语等。

目录结构如下图所示:

 

这里我只在values-zh-rCN作了改动,代码如下:

 

[java]  view plain copy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.     <string name="hello">Hello World, ResourceDemo!</string>  
  4.     <string name="app_name">ResourceDemo</string>  
  5.     <string name="land">这是横屏模式.</string>  
  6.      <string name="port">这是竖屏模式.</string>  
  7. </resources>  

 

我们运行程序之前,把手机语言改成中文,在settings(设置)->language & keyboards(语言与键盘)目录下,选择简体中文,如下图所示:

最然在运行上述工程,效果如下:

这时候我们应用的显示内容就为中文了,而不去显示values/strings.xml里的内容。

相关文章:

  • frame与bounds
  • wpa_supplicant 和 802.11g WPA 认证的配置
  • 礼物
  • javaweb之动态读excel,导入excel,poi,jxl 支持判断2003.2007及以上
  • iOS如何兼容的应用程序32位系统和64Bit系统
  • linux下实时查看tomcat运行日志
  • C#中对象的销毁有三种方式Finalize,Dispose,GC。
  • shrio教程初级(八)shiro验证码与记住登录
  • 转载blog_Linux下Tomcat日志定期清理 及 logrotate 配置
  • Android Fragment间对象传递
  • windows下sublime text的node.js开发环境搭建
  • 关于PHP设计模式的分析和理解
  • ibatis设置启用及关闭命名空间
  • struts1和struts2的区别对比
  • HA集群之三:corosync+pacemaker实现httpd服务的高可用(crm的用法)
  • 【Leetcode】101. 对称二叉树
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【node学习】协程
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 78. Subsets
  • Angular 响应式表单 基础例子
  • C# 免费离线人脸识别 2.0 Demo
  • canvas 绘制双线技巧
  • extract-text-webpack-plugin用法
  • python 学习笔记 - Queue Pipes,进程间通讯
  • SpringBoot 实战 (三) | 配置文件详解
  • spring学习第二天
  • Swift 中的尾递归和蹦床
  • swift基础之_对象 实例方法 对象方法。
  • unity如何实现一个固定宽度的orthagraphic相机
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 如何设计一个微型分布式架构?
  • 一个SAP顾问在美国的这些年
  • 自定义函数
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (一)认识微服务
  • (正则)提取页面里的img标签
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • *2 echo、printf、mkdir命令的应用
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net 垃圾回收机制原理(二)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET学习全景图
  • .NET值类型变量“活”在哪?
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @Autowired标签与 @Resource标签 的区别
  • @EnableWebMvc介绍和使用详细demo
  • [30期] 我的学习方法
  • [AAuto]给百宝箱增加娱乐功能
  • [Android] Android ActivityManager
  • [Android]使用Android打包Unity工程