最新res目錄講解(drawable、layout、values等目錄的分辨率和layout的橫豎屏,以及values的多語言)
html
咱們建好一個android 的項目後,默認的res下面 有drawable、layout、values等目錄
java
啓開一個新的Android專案後在res資料夾內會有android
drawable-hdpi
drawable-mdpi
web
drawable-ldpiapp
drawable-xhdpi框架
drawable-xxhdpi
ide
三個目錄,所定義的dpi皆不一樣佈局
通常來說,ldpi是120,mdpi是160,hdpi是240,xhdpi的dip是320,xxhdpi的是480。
xhdpi是Android 2.2纔開始增長的分類;xlarge是Android 2.3纔開始增長的分類; tvdip 則是最近的事。
此外
四種分辨率密度分類: ldpi(低,480*320及如下),mdpi(中等,480*320-800*480),hdpi(高,800*480-1280*720),xhdpi(特高,1920*1080),xxhdpi目前僅有Nexus 10使用(2560*1600)
測試
Android系統會根據機器的解析度來分辨鑑定對應到相關的資料夾找出對應的圖片,什麼分辨率就使用對應的drawable下的目錄;字體
在android中要讓手機自適應不一樣分辨率的手機,總的來講有三種方法:
1.一種是代碼實現佈局
2.一種是多個layout來實現。
3.最後是使用屬性layout_weight來實現自適應多個分辨率,可是肯定是若是佈局較複雜,實現起來比較難控制,複雜。
這裏是說res目錄固然是說的使用多個layout來自適應分辨率:
其實很簡單,只須要在res目錄下建立不一樣的layout文件夾,好比layout-640x360,layout-800x480,全部的layout文件在編譯以後都會寫入R.java裏,而系統會根據屏幕的大小本身選擇合適的layout進行使用。
屏幕方向:
橫屏豎屏自動切換:
能夠在res目錄下創建layout-port-800x600和layout-land兩個目錄,裏面分別放置豎屏和橫屏兩種佈局文件,這樣在手機屏幕方向變化的時候系統會自動調用相應的佈局文件,避免一種佈局文件沒法知足兩種屏幕顯示的問題。
不一樣分辨率橫屏豎屏自動切換:
以800x600爲例
能夠在res目錄下創建layout-port-800x600和layout-land-800x600兩個目錄
不切換:
如下步驟是網上流傳的,不過我本身以前是經過圖形化界面實現這個配置,算是異曲同工,有空我會把圖片貼上來。
還要說明一點:每個activity都有這個屬性screenOrientation,每個activity都須要設置,能夠設置爲豎屏(portrait),也能夠設置爲無重力感應(nosensor)。
要讓程序界面保持一個方向,不隨手機方向轉動而變化的處理辦法:
在AndroidManifest.xml裏面配置一下就能夠了。加入這一行android:screenOrientation="landscape"。
例如(landscape是橫向,portrait是縱向):
Java代碼:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ray.linkit"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon"android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".GamePlay"
android:screenOrientation="portrait"></activity>
<activity android:name=".OptionView"
android:screenOrientation="portrait"></activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
另外,android中每次屏幕的切換動會重啓Activity,因此應該在Activity銷燬前保存當前活動的狀態,在Activity再次Create的時候載入配置,那樣,進行中的遊戲就不會自動重啓了!
有的程序適合從豎屏切換到橫屏,或者反過來,這個時候怎麼辦呢?能夠在配置Activity的地方進行以下的配置android:screenOrientation="portrait"。這樣就能夠保證是豎屏老是豎屏了,或者landscape橫向。
而有的程序是適合橫豎屏切換的。如何處理呢?首先要在配置Activity的時候進行以下的配置:android:configChanges="keyboardHidden|orientation",另外須要重寫Activity的onConfigurationChanged方法。實現方式以下,不須要作太多的內容:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// land do nothing is ok
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// port do nothing is ok
}
}
寫一個支持多分辨的程序,基於1.6開發的,創建了三個資源文件夾drawable-hdpi drawable-mdpi drawable-ldpi,裏面分別存放72*72 48*48 36*36的icon圖標文件。當我在G1(1.5的系統)上測試時,圖標應該自適應爲48*48纔對啊,但實際顯示的是36*36。怎麼才能讓其自適應 48*48的icon圖標呢
解決辦法 drawable-hdpi drawable-mdpi drawable-ldpi改爲drawable-480X320 drawable-800X480的多分辨支持的文件夾
values目錄是程序默認的資源文件目錄,若是要實現多語言版本的話,咱們就要添加要實現語言的對應的資源文件。
首先咱們點擊添加Android Xml File按鈕,會出現下面的界面:
輸入文件名:string.xml,選中Values單選框,並把下面左列表中的Region添加到左邊的列表裏面,並在Region輸入框裏輸入cn,以下圖
這時,上面的消息提示:若是用Region的話,須要使用語言項,和Region同樣,咱們把Language也添加到右面的列表裏面,填入zh,以下圖
4.0的是選擇Android xml values file,輸入名字後,點擊next 進行操做,和上面的操做差很少。
點擊Finish按鈕,資源文件就會建好了,目錄:res\values-zh-rCN(其實上面一大堆操做,就是爲生成這個目錄)
默認生成的string.xml的代碼:
<?xml version="1.0" encoding="utf-8"?><resources><string name="hello">Hello World, Test!</string><string name="app_name">Test-Multilingual</string></resources>
修改剛剛生成的res\values-zh-rCN目錄下的string.xml:
<?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">測試多語言</string><string name="hello">你好 多語言測試</string></resources>
Values文件彙總以下:
中文(中國):values-zh-rCN
中文(臺灣):values-zh-rTW
中文(香港):values-zh-rHK
英語(美國):values-en-rUS
英語(英國):values-en-rGB
英文(澳大利亞):values-en-rAU
英文(加拿大):values-en-rCA
英文(愛爾蘭):values-en-rIE
英文(印度):values-en-rIN
英文(新西蘭):values-en-rNZ
英文(新加坡):values-en-rSG
英文(南非):values-en-rZA
阿拉伯文(埃及):values-ar-rEG
阿拉伯文(以色列):values-ar-rIL
保加利亞文: values-bg-rBG
加泰羅尼亞文:values-ca-rES
捷克文:values-cs-rCZ
丹麥文:values-da-rDK
德文(奧地利):values-de-rAT
德文(瑞士):values-de-rCH
德文(德國):values-de-rDE
德文(列支敦士登):values-de-rLI
希臘文:values-el-rGR
西班牙文(西班牙):values-es-rES
西班牙文(美國):values-es-rUS
芬蘭文(芬蘭):values-fi-rFI
法文(比利時):values-fr-rBE
法文(加拿大):values-fr-rCA
法文(瑞士):values-fr-rCH
法文(法國):values-fr-rFR
希伯來文:values-iw-rIL
印地文:values-hi-rIN
克羅里亞文:values-hr-rHR
匈牙利文:values-hu-rHU
印度尼西亞文:values-in-rID
意大利文(瑞士):values-it-rCH
意大利文(意大利):values-it-rIT
日文:values-ja-rJP
韓文:values-ko-rKR
立陶宛文:valueslt-rLT
拉脫維亞文:values-lv-rLV
挪威博克馬爾文:values-nb-rNO
荷蘭文(比利時):values-nl-BE
荷蘭文(荷蘭):values-nl-rNL
波蘭文:values-pl-rPL
葡萄牙文(巴西):values-pt-rBR
葡萄牙文(葡萄牙):values-pt-rPT
羅馬尼亞文:values-ro-rRO
俄文:values-ru-rRU
斯洛伐克文:values-sk-rSK
斯洛文尼亞文:values-sl-rSI
塞爾維亞文:values-sr-rRS
瑞典文:values-sv-rSE
泰文:values-th-rTH
塔加洛語:values-tl-rPH
土耳其文:values--r-rTR
烏克蘭文:values-uk-rUA
越南文:values-vi-rVN
在不一樣的分辨率下,Android字體大小怎麼自適應分辨率的變化?
假設須要適應320x240,480x320分辨率。在res目錄下新建文件夾values-320x240, values-480x320。而後在文件夾 values ,values-320x240 和 values-480x320 下新建xml文件dimens.xml,該xml文件內容以下:
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="btnTextSize">14dip</dimen> </resources>
針對不一樣的分辨率,btnTextSize的值不一樣。在佈局文件中,用下面的方式引用該值:
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:id="@+id/lblSet" style="@style/btntext" android:textSize="@dimen/btnTextSize"> </TextView>
經過這種方法,能夠方便設置在不一樣分辨率下,字體的大小了。固然,不只僅字體大小,寬和高等其餘的一些屬性,也能夠經過相似的方式來設置
layout中設置圖片自適應大小,而且設置最大寬高,當圖片的寬高大於設置的最大值時,寬高值爲設置的最大值。
<ImageView android:id="@+id/image_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:maxWidth="42dp" android:maxHeight="42dp" android:scaleType="fitCenter" android:layout_marginLeft="3dp" android:src="@drawable/icon" />
關鍵代碼:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:maxWidth="42dp"
android:maxHeight="42dp"
values-v11表明在API 11+的設備上,用該目錄下的styles.xml代替res/values/styles.xml
values-v14表明在API 14+的設備上,用該目錄下的styles.xml代替res/values/styles.xml
其中API 11+表明android 3.0 +
其中API 14+表明android 4.0 +
比較新的Android版本中附帶了一些應用程序能夠利用的主題,並在這些平臺上運行時,可能要使用這些主題,同時依然要兼容舊的版本。基於不一樣的平臺版本,經過選擇定製主題所使用的資源在不一樣的父主題之間的切換來達到兼容的目的。
例如,如下是用標準的平臺默認的亮度主題聲明的一個簡化的定製主題,它被放在res/values文件夾下的一個XML文件中(一般是res/values/styles.xml):
<stylename="LightThemeSelector"parent="android:Theme.Light">
...
</style>
當應用程序運行在Android3.0(API級別11)或更高的版本上時,針對這個主題要使用比較新的holographic主題,因此,要在res/values-v11的文件夾下的一個XML文件中放入一個可選的主題聲明,把它的父主題設置爲holographic主題:
<stylename="LightThemeSelector"parent="android:Theme.Holo.Light">
...
</style>
如今就能夠像日常同樣使用這個LightThemSelector主題了,若是應用程序運行在Android3.0或更高的版本,就會自動的切換到holographic主題。
在R.styleable.Theme類中能夠找到用於主題的標準屬性列表。
有關提供可選資源的更多信息,如基於平臺版本或其餘設備配置的主題和佈局,能夠查看「Providing Resources」文檔。
http://developer.android.com/guide/topics/resources/providing-resources.html
使用平臺樣式和主題
Android平臺提供了一個大的用於應用程序的樣式和主題集合。能夠在R.style類中找到全部可用的樣式。要使用其中列出的樣式,就要用一個前綴來替換在樣式名中的全部下劃線。如,能夠用」@android :style/Theme.NoTitleBar」來替代Theme_NoTitleBar。可是,R.style類文檔沒有完整的描述樣式,所以查看實際的使用這些樣式和主題的源代碼會更好的幫助理解提供的每種樣式屬性。爲了更好的引用Android的樣式和主題,請看下列源代碼:1. Android樣式(styles.xml)2. Android主題(themes.xml)這兩個文件會經過例子幫助你設計,例如,在Android主題的源代碼中,可以找到<style name=」Theme.Dialog」>聲明。在這個定義中,能夠看到全部的Android框架使用的對話框樣式屬性。