it-swarm.com.ru

Каков размер ActionBar в пикселях?

Мне нужно знать точный размер ActionBar в пикселях, чтобы применить правильное фоновое изображение.

244
Eugene

Чтобы получить высоту ActionBar в XML, просто используйте

?android:attr/actionBarSize

или если вы пользователь ActionBarSherlock или AppCompat, используйте это

?attr/actionBarSize

Если вам нужно это значение во время выполнения, используйте это

final TypedArray styledAttributes = getContext().getTheme().obtainStyledAttributes(
                    new int[] { Android.R.attr.actionBarSize });
mActionBarSize = (int) styledAttributes.getDimension(0, 0);
styledAttributes.recycle();

Если вам нужно понять, где это определяется:

  1. Само имя атрибута определено в платформе / res/values ​​/ attrs.xml
  2. Платформа themes.xml выбирает этот атрибут и присваивает ему значение.
  3. Значение, назначенное на шаге 2, зависит от разных размеров устройства, которые определены в различные измерения. Файлы XML в платформе, т.е. ядро ​​/ RES/RES/значения-sw600dp/dimens.xml
524
AZ13

Из декомпилированных источников Android 3.2 framework-res.apk, res/values/styles.xml содержит:

<style name="Theme.Holo">
    <!-- ... -->
    <item name="actionBarSize">56.0dip</item>
    <!-- ... -->
</style>

3.0 и 3.1 вроде бы одинаковые (по крайней мере из AOSP) ...

54
Jake Wharton

Чтобы получить фактическую высоту панели действий, необходимо разрешить атрибут actionBarSize во время выполнения.

TypedValue tv = new TypedValue();
context.getTheme().resolveAttribute(Android.R.attr.actionBarSize, tv, true);
int actionBarHeight = getResources().getDimensionPixelSize(tv.resourceId);
43
David Boho

Один из образцов Honeycomb относится к ?android:attr/actionBarSize

33
Vikram Bodicherla

Мне нужно было правильно реплицировать эти высоты в приложении совместимости до ICS и копаться в основной источник фреймворка . Оба ответа выше верны.

Это в основном сводится к использованию квалификаторов. Высота определяется измерением "action_bar_default_height"

По умолчанию это 48dip. Но для -land это 40dip, а для sw600dp - 56dip.

20
Manfred Moser

Если вы используете ActionBar совместимости из недавнего пакета поддержки app7 v7, вы можете получить высоту, используя

@dimen/abc_action_bar_default_height

документация

17
flawedmatrix

С новым поддержка библиотеки v7 (21.0.0) имя в R.dimen изменилось на @ Dimen/abc_action_bar_default_height _ материал .

Поэтому при обновлении с предыдущей версии библиотеки поддержки следует использовать это значение в качестве высоты панели действий.

16
MrMaffen

Если вы используете ActionBarSherlock, вы можете получить высоту с

@dimen/abs__action_bar_default_height
9
JesperB

@ Ответ AZ13 хороший, но в соответствии с рекомендации по разработке Android , ActionBar должен быть минимум 48dp .

4
aaronsnoswell

На моем Galaxy S4, имеющем> 441 точек на дюйм> 1080 x 1920> Получение высоты Actionbar с помощью getResources (). GetDimensionPixelSize Я получил 144 пикселя.

Используя формулу px = dp x (dpi/160), я использовал 441dpi, тогда как мое устройство лежит
в категории 480dpi. так что это подтверждает результат.

0
Muhammad

Сводка класса обычно является хорошим местом для начала. Я думаю, что метод getHeight () должно быть достаточно.

Правка:

Если вам нужна ширина, она должна быть шириной экрана (верно?), И это можно собрать вот так .

0
Matt

Я сделал таким образом для себя, этот вспомогательный метод должен пригодиться кому-то:

private static final int[] RES_IDS_ACTION_BAR_SIZE = {R.attr.actionBarSize};

/**
 * Calculates the Action Bar height in pixels.
 */
public static int calculateActionBarSize(Context context) {
    if (context == null) {
        return 0;
    }

    Resources.Theme curTheme = context.getTheme();
    if (curTheme == null) {
        return 0;
    }

    TypedArray att = curTheme.obtainStyledAttributes(RES_IDS_ACTION_BAR_SIZE);
    if (att == null) {
        return 0;
    }

    float size = att.getDimension(0, 0);
    att.recycle();
    return (int) size;
}
0
Min2