全球化的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"
主題主要用於什麼?
樣式是應用於具體的顯示控件上,主題是應用於整個應用或者一個視圖上。
主題的定義和樣式的定義是一樣的。
如何去適配手機的屏幕?