Android 国际化和屏幕适配

一、国际化
1、语言的国际化
values/strings.xml 默认
values-zh-rCN/strings.xml 中文(简体)
values-zh-rTW/strings.xml 中文(繁体)
values是默认的,如果存在你未定义的语言,会使用这个文件夹下的配置文件。
values-zh-rCN 和 values-en-rUS。 并在这两个目录中各建立一个strings.xml。要实现不同语言和地区的国际化,这些配置选项包括语言代号和地区代号。 表示中文和中国的配置选项是 zh-rCN; 表示英文和美国的配置选项是en-rUS. 表示zh 和 en 表示中文和英文;CN 和 US 表示中国和美国; 前面的r 是必须的。
2、图片的国际化
drawable-zh-hdip
drawable-zh-ldip
drawable-zh-mdip
其他的资源目录也可以采用同样的方式处理语言和地区的国际化,例如在res 目录中建立两个目录: drawable-zh-rCN 和 drawable-en-rUS,并在这两个目录中分别放一个flag.jpg, 然后可以正常引用这个图像资源。
二、屏幕适配
首先:你需要在AndroidManifest.xml文件的<manifest>元素如下添加子元素
<supports-screens android:largeScreens="true"
   android:normalScreens="true" android:anyDensity="true"
   android:smallScreens="true">
</supports-screens>
android:anyDensity="true" ,这一句对整个的屏幕都起着十分重要的作用,值为true,我们的应用程序当安装在不同密度的手机上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资源。
相反,如果值设置为false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机,如果设置android:anyDensity="false",Android系统会将240 x 320(低密度)转换为 320×480(中密度),这样的话,应用就会在小密度手机上加载mdpi文件中的资源。
总结一下:
第一:android:anyDensity="true",系统会依据屏幕密度,自动去找对应的文件夹
第二:android:anyDensity="false",
(1) 如果drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源
(2) 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源。
(3) 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有对应的图片资源,那么系统会加载drawable-mdpi文件夹中的资源
注意上图各种文件夹的不同表示。
drawable-hdpi 该图片即适用于横屏,也适用于竖屏
drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源
drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源

要实现屏幕的适配,要针对不同的屏幕提供一套对应的界面。
layout-320X240
layout-480x320
注意分辨率大的数字写在前面!
三、样式和主题
主题的应用和样式是一样的区别在于,样式是作用在某一个控件上的,主题是作用在一个Activity或Application上的。
样式:
1.styles.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="textViewStyle">
      <item name="android:textSize">22sp</item>
      <item name="android:textColor">red</item>
   </style>
</resources>
使用:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="自定义样式"
style="@style/textViewStyle"/>
另一种继承方式
在styles.xml中如下定义(如果要修改父样式的某个属性只要覆盖就好了)
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="textViewStyle">
      <item name="android:textSize">22sp</item>
      <item name="android:textColor">#FF0000</item>
   </style>
   <style name="childStyle" parent="textViewStyle">
      <item name="android:layout_width">wrap_content</item>
      <item name="android:layout_height">wrap_content</item>
      <item name="android:textColor">#00FF00</item>
   </style>
</resources>
主题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="qnTheme">
      <item name="android:windowNoTitle">true</item>
      <item name="android:windowFullscreen">true</item>
   </style>
</resources>
可以写成<item name="android:windowFullscreen">?android:windowNoTitle</item>
?表示引用在当前主题当中定义过的资源的值。
注意:当样式和主题冲突的时候,优先使用样式!!

猜你喜欢

转载自iaiai.iteye.com/blog/1762693