Android 學習筆記五:支援不同的裝置
這裡所說的不同裝置包括兩種不同:作業系統語言,以及螢幕大小和畫素密度。
國際化
適應不同的作業系統語言,即平時說的 i18n(internationalization),即國際化。我們這裡只討論最簡單的一種情況,就是對不同的系統顯示對應語言的文案,其實還有更多的包括對其方式、操作習慣等就不考慮了。
前面講到過,不要在程式碼中寫死文案,所有文案相關的字串都應該寫在 strings.xml
中。這樣做國際化就簡單很多,只需要再新建一個 values-xxx
檔案,並在裡面放上一個 strings.xml
檔案即可。當安卓應用啟動的時候會自動選擇對應的語言,如果沒有則會自動降級到 values
。比如 如果定義了一個 values-zh/strings.xml
,那麼當作業系統為中文的時候就會自動載入這個檔案中的值。而且 strings.xml
裡面的寫法完全一樣。
現在建立一個 values-zh/strings.xml
檔案,並且在裡面寫上如下程式碼:
<resources>
<string name="app_name">測試應用</string>
<string name="action_settings">設定</string>
<string name="title">標題</string>
<string name="button_login">登入</string>
<string name="username_hint">輸入賬號</string>
<string name="username_label">賬號</string>
<string name="password_hint">輸入密碼</string>
<string name="password_label">密碼</string>
<string name="title_activity_profile">首頁</string>
<string name="hello_world">你好!</string>
<string name="action_search">搜尋</string>
</resources>
然後把 values/strings.xml
裡面的字串都改成英文:
<resources>
<string name="app_name">HelloWorld</string>
<string name="action_settings">Settings</string>
<string name="title">title</string>
<string name="button_login">login</string>
<string name="username_hint">username</string>
<string name="username_label">username</string>
<string name="password_hint">password</string>
<string name="password_label">password</string>
<string name="title_activity_profile">ProfileActivity</string>
<string name="hello_world">Hello world!</string>
<string name="action_search">search</string>
</resources>
然後執行,在模擬器中設定不同的語言試試。
適應不同的螢幕大小和畫素密度
螢幕大小是指螢幕的高度和寬度,而畫素密度指的是多少個物理畫素來顯示一個邏輯畫素。和上面的國際化幾乎一樣的,都是通過增加不同的資原始檔來實現適應不同的螢幕。
如果你的應用支援橫屏的話,橫屏其實是被當做了另一種螢幕尺寸的。
下面我們來修改一下 MainActivity
,做一個簡單的改動,讓他在大螢幕上是水平排列的,而在小螢幕上是垂直排列的。
在 res
下面新建一個 layout-large/activity_main.xml
檔案,把原來的 activity_main.xml
複製到這裡來,需要對 layout-large/activity_main.xml
進行一些修改:
- android:orientation=“vertical” 改成 android:orientation=”horizontal”
- 把裡面的幾個元件全部改成 android:layout_width=“wrap_content”,不然寬度太寬之後會把後面的寄到螢幕外
修改之後的程式碼如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:orientation="horizontal">
<TextView android:text="@string/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<EditText
android:id="@+id/username"
style="@style/EditTextStyle"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:drawableLeft="@drawable/ic_phone"
android:drawableStart="@drawable/ic_phone"
android:hint="@string/username_hint"
android:imeActionId="@+id/username"
android:imeOptions="actionUnspecified"
android:inputType="text"/>
<EditText
android:id="@+id/password"
style="@style/EditTextStyle"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:drawableLeft="@drawable/ic_lock"
android:drawableStart="@drawable/ic_lock"
android:hint="@string/password_hint"
android:imeActionId="@+id/password"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"/>
<Button
android:id="@+id/button_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/button_login"
/>
</LinearLayout>
然後執行,在不同的模擬器上會看到有不同的佈局。
對不同畫素密度的裝置也是同樣的方式,只需要建立 drawable-h/
之類的資料夾,並且在裡面放上對應的圖片就行了。
相關文章
- android學習筆記五Android筆記
- Android學習筆記(五)——FragmentAndroid筆記Fragment
- 作業系統學習筆記:裝置管理作業系統筆記
- JVM 學習筆記(五)JVM筆記
- cmake學習筆記(五)筆記
- Javascript 學習 筆記五JavaScript筆記
- 北航OS課程筆記--五、裝置管理筆記
- Java IO學習筆記五Java筆記
- Spss 學習筆記(五)SPSS筆記
- c++學習筆記(五)C++筆記
- Android 學習筆記雜記Android筆記
- 字典--Python學習筆記(五)Python筆記
- 大資料學習筆記(五)大資料筆記
- 《機器學習》西瓜書學習筆記(五)機器學習筆記
- HexMap學習筆記(五)——更大的地圖筆記地圖
- 【每日學習記錄】使用錄影裝置記錄每天的學習
- Android學習筆記·ANRAndroid筆記
- Android學習筆記·HandlerAndroid筆記
- Android SQLite學習筆記AndroidSQLite筆記
- Android學習筆記一Android筆記
- Android學習筆記(6)Android筆記
- Android學習筆記(3)Android筆記
- Android學習筆記(4)Android筆記
- Android學習筆記(5)Android筆記
- Android學習筆記(2)Android筆記
- Android學習筆記(1)Android筆記
- Android學習筆記(8)Android筆記
- Android學習筆記(7)Android筆記
- Android GC 學習筆記AndroidGC筆記
- android學習筆記--ScannerAndroid筆記
- android學習筆記--AlarmManagerAndroid筆記
- android學習筆記二Android筆記
- android學習筆記三Android筆記
- Android學習筆記四Android筆記
- android學習筆記六Android筆記
- Android OpenGL 學習筆記Android筆記
- Kubernetes學習筆記(五):卷筆記
- hive學習筆記之五:分桶Hive筆記