2013-05-29 45 views
0

我測試的兩個非常不同的手機我的應用程序:
不能計算微分兩種不同的屏幕尺寸

Htc One X (running 4.1) 
720x1280, density XHigh (320dpi) 

Samnsung GT-S6500D running 2.3.6 
320x480, density medium, (160dpi) 

現在,我怎樣才能確保每個設備使用不同的佈局文件夾? 我創建 佈局sw720dp, 佈局sw600dp, 佈局正常, ...

因爲2.3不帶佈局sw320dp考慮,我猜測它會採取layout-normal,至極它,好。

現在爲什麼更大的屏幕上沒有layout-sw720dp文件夾?它也落入layout-normal >>爲什麼?

我用

android:minSdkVersion="10" 
    android:targetSdkVersion="17" 

,並建立target = level 15 (4.0.3)

+1

有你的清單文件中提到supportscreens HTTP://developer.android.com/guide/topics/manifest/supports-screens-element.html – Raghunandan

+0

@Raghunandan我現在做到了,但似乎並沒有幫助。 – estoke

回答

0

我認爲這個問題是您正在使用兩種不同的佈局分類。 Normal爲普通屏幕密度,爲什麼從3.2開始可用的佈局基於最小屏幕尺寸。嘗試刪除正常密度佈局,看看會發生什麼。 當然,你可以總是從代碼中填充不同的佈局,如上所示。

+0

謝謝,但我試過,它在2.3上運行時崩潰,因爲(我想)它does not找不到任何佈局文件夾(只有layout-sw dp)如果電話版本<3.2 – estoke

+0

不支持,我錯過了您定位舊版本的部分。其他可能的問題可能是,Htc One X實際上並不具有720像素,但由於數字意味着最小,所以不適合該類別。這會影響Nexus手機,因爲屏幕上的按鈕減少了應用程序可用的屏幕大小。 – PSIXO

+0

是的,但Log.d(LOG_TAG,「wXh =」+ metrics.widthPixels +「x」+ metrics.heightPixels); 會記錄我720x1280,如果不是這種情況,它至少應該屬於layout-sw600dp。但事實並非如此。我正在執行sourabh kasliwal命題,這對我來說不是一個好的解決方案,但至少它確實有效。 – estoke

2

獲取屏幕分辨率,並相應地轉移其

private final float LOW_LEVEL=0.75f; 
    private final float MEDIUM_LEVEL=1.0f; 
    private final float HIGH_LEVEL=1.5f; 

    float level = getApplicationContext().getResources().getDisplayMetrics().density; 
      if(level == LOW_LEVEL){ 
        setContentView(R.layout.activity_login); 
      }else if(level == MEDIUM_LEVEL){ 
        //do smoothing here 
        setContentView(R.layout.activity_login); 

      }else if(level == HIGH_LEVEL){ 
        //do something here 
        setContentView(R.layout.activity_login); 
      }else { 
        //do something here 
        setContentView(R.layout.activity_logins); 
      } 
+0

我的應用程序在活動和片段數量方面非常複雜,如果必須採用這種方法,我需要更新很多類。這是做到這一點的唯一方法嗎?根據文檔,佈局文件夾旨在處理不同的屏幕尺寸。 – estoke

+0

爲此嘗試此http://developer.android.com/guide/practices/screens_support.html –