2014-09-05 2 views
3

В Android API 16 (4.1 Jelly Bean), а позже у нас есть метод getCurrentSizeRange, чтобы получить диапазон ширины и высоты. Как получить диапазон размеров в версиях до 4.1?getCurrentSizeRange() на Android раньше, чем 4.1

Я попытался изучить исходный код, чтобы узнать, как вычисляется диапазон. Это делается по-разному на разных версиях 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

Скотт: высоты и ширина отличаются от currentSizeRange в 4.1. Взгляните на документацию getCurrentSizeRange, и вы получите представление. – 500865

+0

Да, это правильно. В зависимости от того, что вы хотите делать со значениями, вам все равно нужно проанализировать значения, возвращаемые из getMetrics(), и определить наименьшую и самую большую ширину и высоту. Это, по общему признанию, не идеальное решение, но поддержка старых версий API никогда не бывает без проблем. – scottt

Смежные вопросы