2014-09-05 27 views
3

在Android API 16(4.1 Jelly Bean)上,後來我們使用方法getCurrentSizeRange來獲取寬度和高度的範圍。如何在4.1之前的版本上獲得大小範圍?早於4.1的Android上的getCurrentSizeRange()

我試圖查看源代碼來查看範圍是如何計算的。它在不同的Android版本上做的不同,我找不到計算這些尺寸的邏輯。任何可以幫助我找到這個指針非常讚賞。

回答

1

如果您只是想確定縱向和橫向的高度和寬度,您可以快速強制這兩種方式的方向,並獲得每種方式的指標。以下片段可以做到這一點。該代碼由一個簡單的首選項檢查來保護,因爲我在onCreate()中測試了這一點,並且方向更改將導致重新啓動活動(並進入循環)。在你的應用中,你可能會想要做更具體的事情。此外,所有使用的方法都有效至API 1,但可能已被更高版本替換或重命名。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
if (prefs.getBoolean("firstTime", true)) { 
    prefs.edit().putBoolean("firstTime", false).commit(); 

    DisplayMetrics dm = new DisplayMetrics(); 

    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    Log.e(TAG, String.format("landscape is %d x %d", dm.widthPixels, dm.heightPixels)); 
    // Do something with the values, perhaps saving them in prefs 

    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    Log.e(TAG, String.format("portrait is %d x %d", dm.widthPixels, dm.heightPixels)); 
    // Do something with the values, perhaps saving them in prefs 
} 
+0

Scott:高度和寬度與4.1中的currentSizeRange不同。看看getCurrentSizeRange的文檔,你會得到一個想法。 – 500865 2014-09-15 19:11:39

+0

是的,這是正確的。根據您想要對值執行的操作,您仍然需要分析getMetrics()返回的值並確定最小和最大寬度以及高度。毫無疑問,這不是一個理想的解決方案,但支持舊的API版本永遠不會沒有麻煩。 – scottt 2014-09-15 19:37:33