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

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

Ответ 1

Чтобы получить высоту 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();

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

  • Само название атрибута определено на платформе /res/values/attrs.xml
  • Платформа themes.xml выбирает этот атрибут и присваивает ему значение.
  • Значение, назначенное на шаге 2, зависит от разных размеров устройства, которые определены в различных файлах dimens.xml на платформе, т.е. core/res/res/values-sw600dp/dimens.xml

Ответ 2

Из декомпилированных источников 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)...

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Он определяется как 48dip для значения по умолчанию. Но для -land это 40dip, а для sw600dp - 56dip.

Ответ 6

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

@dimen/abc_action_bar_default_height

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

Ответ 7

С новой v7 support library (21.0.0) имя в R.dimen изменилось на @dimen/abc_action_bar_default_height_ материал.

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

Ответ 8

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

@dimen/abs__action_bar_default_height

Ответ 10

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

EDIT:

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

Ответ 11

Соотношение сторон: 8.3: 100

пример: если ваш экран имеет 1024 пикселя, тогда 84 будет вашей высотой панели действий.

Ответ 12

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

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

Ответ 13

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

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;
}