国际化、样式和主题、屏幕适配
国际化 i18n
全球化的Internet需要全球化的软件。全球化软件即意味着同一个版本的产品能够容易地适用于不同地区的市场。引入国际化的目的为了提供自适用、更友好的用户界面,并不需要改变程序的逻辑功能。国际化的英文单词是Internationalization,因为这个单词太长了,有时也简称I18N,其中I是这个单词的第一个字母,18表示中间省略的字母个数,而N代表这个单词的最后一个字母。
Android所采用到资源管理方式非常方便地实现程序国际化,分为两种:文字的国际化、图片的国际化。
Android应用使用res\values目录下的资源文件来保存程序中用到的字符串,需要为values目录添加几个不同的语言国家的目录,命名方式:
values-语言代码-r国家代码
Android应用还可以添加不同国家版本的目录来显示不同的图片文件,命名格式:
drawable-语言代码-r国家代码
手动设置软件的语言
//设置语言
public void setLanguage(Locale local){
//获得资源对象
Resourcesresources = getResources();
//获得设置对象
Configurationconfiguration = resources.getConfiguration();
//获得屏幕参数:主要是分辨率,像素等。
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
//设置语言
configuration.locale = local;
//更新设置
resources.updateConfiguration(configuration,displayMetrics);
}
//控件属性重新赋值
setTitle(R.string.app_name);
tv_language.setText(R.string.language);
iv_flag.setImageDrawable((getResources().getDrawable(R.drawable.flag)));
bt_chinese.setText(R.string.set_chinese);
bt_english.setText(R.string.set_english);
样式和主题 style and theme样式
如果我们经常需要对某个类型的组件指定大致相似的格式,比如字体、颜色、背景色等,使用样式可以为View组件重复指定这些属性。
样式资源文件放在/res/values目录下,样式资源文件的根元素是<resources.../>元素,该元素内可包含多个<style.../>子元素,每个<style.../>元素定义一个样式。<style.../>元素指定如下两个属性。
name:指定样式的名称
parent:指定该样式所继承的父样式。
自定义样式
<style name="test_style">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">@android:color/darker_gray</item>
</style>
继承该样式第一种方式
<style name="test1_style"parent="test_style">
<item name="android:layout_width">fill_parent</item>
</style>
继承该样式第二种方式
<style name="test1_style.test2_style">
<item name="android:layout_width">wrap_content</item>
</style>
引用样式示例:style="@style/mystyle"
主题
主题和样式资源非常相似,主题资源同样使用<style.../>元素来定义主题
主题和样式的区别:
1.主题不能作用于单个的View组件,只作用于Activity。
2.主题定义的格式是改变窗口外观的格式,例如窗口标题、背景等。
<!-- 定义主题 -->
<style name="theme">
<!--全屏 -->
<itemname="android:windowFullscreen">true</item>
<!-- 取消标题栏 -->
<item name="android:windowNoTitle">true</item>
</style>
设置全屏显示,
?属性, 代表引用该属性的值
AndroidManifest.xml中加入: 可以在应用和activity里面添加
android:theme="@style/theme"
代码中动态设置:
setTheme(R.style.theme);
在super.onCreate(savedInstanceState);之前设置主题样式
样式是应用于具体的显示控件上,主题是应用于整个应用或者一个视图上。
主题的定义和样式的定义是一样的。
屏幕适配
Android设备屏幕分辨率很多,为了适应不同终端设备的不同分辨率,从而使布局显示更加合理和准确,需要在res目录下建立对应不同设备分辨率的文件夹。
文件夹格式:layout-长x宽,数字大的放在前面。
课后问题
Android的国际化怎么实现?
Android应用使用res\values目录下的资源文件来保存程序中用到的字符串,需要为values目录添加几个不同的语言国家的目录,命名方式:
values-语言代码-r国家代码
Android应用还可以添加不同国家版本的目录来显示不同的图片文件,命名格式:
drawable-语言代码-r国家代码
为什么要使用样式?样式主要用于什么?
抽出相同的属性,便于维护和扩展
怎么样去创建样式?
<!-- 定义样式 -->
<style name="mystyle">
<itemname="android:textColor">#FF0000</item>
<itemname="android:textSize">30sp</item>
</style>
<style name="childstyle">
<itemname="android:width">200dp</item>
<itemname="android:height">50dp</item>
<itemname="android:background">#00FF00</item>
</style>
<!-- 样式的继承 -->
<stylename="childstyle.mystyle">
<itemname="android:background">#0000FF</item>
</style>
引用样式示例:style="@style/mystyle"
主题主要用于什么?
样式是应用于具体的显示控件上,主题是应用于整个应用或者一个视图上。
主题的定义和样式的定义是一样的。