Android: как получить значение атрибута "listPreferredItemHeight" в коде?
Ниже приведен код Resources$NotFoundException
TypedValue value = new TypedValue();
((Activity)context).getResources().getValue(android.R.attr.listPreferredItemHeight, value, true);
EDIT: добавлен код в ответ на ответ.
Когда я запускаю приведенный ниже код, все члены displayMetrics
равны 0. Как есть ret
.
TypedValue value = new TypedValue();
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity)context).getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true);
float ret = value.getDimension(displayMetrics);
Ответы
Ответ 1
Это работает:
TypedValue value = new TypedValue();
((Activity)context).getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true);
EDIT: вы получаете нуль, потому что не инициализировали экземпляр DisplayMetrics
правильно. Для того, чтобы сделать какое-либо значимое преобразование, ему нужна система отсчета (отображение).
android.util.TypedValue value = new android.util.TypedValue();
boolean b = getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true);
String s = TypedValue.coerceToString(value.type, value.data);
android.util.DisplayMetrics metrics = new android.util.DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
float ret = value.getDimension(metrics);
В моем Nexus 1 s
есть 64.0dip, а ret
- 96.
Ответ 2
Другой ответ
public float getItemHeight() {
TypedValue value = new TypedValue();
DisplayMetrics metrics = new DisplayMetrics();
context.getTheme().resolveAttribute(
android.R.attr.listPreferredItemHeight, value, true);
((WindowManager) (context.getSystemService(Context.WINDOW_SERVICE)))
.getDefaultDisplay().getMetrics(metrics);
return TypedValue.complexToDimension(value.data, metrics);
}
это может быть более полезно.
Ответ 3
Ответ Femi был очень полезен. Не желая отвлекаться от его ответа, я взял логику и разместил ее в методе удобство использования библиотеки, и играй. Я планирую обновить код с помощью других методов атрибутов с течением времени. Надеюсь, это окажется полезным для кого-то.
(Обратите внимание, что я обнаружил, что Resources.getDisplayMetrics()
представляется более простым способом возврата показателей отображения, а не запросов WindowManager.)
Ответ 4
Самый короткий ответ (без DisplayMetrics
):
TypedValue typedValue = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, typedValue, true);
int height = TypedValue.complexToDimensionPixelSize(typedValue.data, context.getResources().getDisplayMetrics());