Подтвердить что ты не робот

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);
4b9b3361

Ответ 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());