Если вы просто пытаетесь определить высоты и ширину для портретной и ландшафтной ориентации, вы можете просто ускорить ориентацию в обоих направлениях и получить метрики в каждом направлении. Следующий фрагмент делает это. Код защищен простой проверкой предпочтений, так как я проверил это в 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
}
Скотт: высоты и ширина отличаются от currentSizeRange в 4.1. Взгляните на документацию getCurrentSizeRange, и вы получите представление. – 500865
Да, это правильно. В зависимости от того, что вы хотите делать со значениями, вам все равно нужно проанализировать значения, возвращаемые из getMetrics(), и определить наименьшую и самую большую ширину и высоту. Это, по общему признанию, не идеальное решение, но поддержка старых версий API никогда не бывает без проблем. – scottt