Мне нужно знать точный размер 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
Ответ 9
@Ответ на AZ13 хорош, но согласно Руководства по дизайну Android, ActionBar должен быть не менее 48dp.
Ответ 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;
}