天天看點

android應用自适應多分辨率的解決方法

1. 首先是建立多個layout檔案夾(drawable也一樣)。

在res目錄下建立多個layout檔案夾,檔案夾名稱為layout-800x480等。需要适應那種分辨率就寫成什麼。

注意:

         a.   較大的數字要寫在前面:比如layout-854x480而不能寫layout-480x854.

         b.   兩個數字之前是小寫字母x,而不是乘号。

2. 在不能的layout下調整layout 的長寬等各種設定。以适應不同的分辨率。

3 最後需要在androidmanifest.xml裡面添加下面一段,沒有這一段自适應就不能實作:

    </application>

    <supports-screens

android:largescreens="true"

     android:normalscreens="true"

  android:anydensity = "true"/>

</manifest> 

  在</application>标簽和</manifest> 标簽之間添加上面那段代碼。即可

android自适應不同分辨率或不同螢幕大小的layout布局(橫屏|豎屏)

一:不同的layout 

android手機螢幕大小不一,有480x320, 640x360, 800x480.怎樣才能讓app自動适應不同的螢幕呢? 

   其實很簡單,隻需要在res目錄下建立不同的layout檔案夾,比如layout-640x360,layout-800x480,所有的layout檔案在編譯之後都會寫入r.java裡,而系統會根據螢幕的大小自己選擇合适的layout進行使用。 

二:hdpi、mdpi、ldpi 

在之前的版本中,隻有一個drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是為了支援多分辨率。 

  drawable- hdpi、drawable- mdpi、drawable-ldpi的差別: 

  (1)drawable-hdpi裡面存放高分辨率的圖檔,如wvga (480x800),fwvga (480x854) 

  (2)drawable-mdpi裡面存放中等分辨率的圖檔,如hvga (320x480) 

  (3)drawable-ldpi裡面存放低分辨率的圖檔,如qvga (240x320) 

  系統會根據機器的分辨率來分别到這幾個檔案夾裡面去找對應的圖檔。

更正:應該是對應不同density 的圖檔     

  在開發程式時為了相容不同平台不同螢幕,建議各自檔案夾根據需求均存放不同版本圖檔。 

[i]備注:三者的解析度不一樣,就像你把電腦的分辨率調低,圖檔會變大一樣,反之分辨率高,圖檔縮小。 [/i] 

螢幕方向: 

橫屏豎屏自動切換: 

     可以在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" 

    </application> 

    <uses-sdk android:minsdkversion="3" /> 

另外,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的多分辨支援的檔案夾

繼續閱讀