Я пытаюсь получить высоту ActionBar
(используя Шерлока) каждый раз, когда создается действие (особенно для обработки изменений конфигурации при вращении, когда высота ActionBar может измениться).
Для этого я использую метод, ActionBar.getHeight()
который работает только тогда, когда ActionBar
показано.
Когда первое действие создается в первый раз, я могу позвонить getHeight()
в onCreateOptionsMenu
обратный вызов. Но этот метод не вызывается после.
Поэтому мой вопрос: когда я могу вызвать getHeight () и быть уверенным, что он не вернет 0? Или, если это невозможно, как я могу установить высоту панели действий?
В XML вы должны использовать этот атрибут:
источник
android.support.v7.appcompat.R.attr.actionBarSize
. Если вы хотите использовать его в макете XMLandroid:paddingTop="?attr/actionBarSize"
. Работает нормально везде.Хорошо, я погуглил и попал на этот пост несколько раз, так что я думаю, что было бы хорошо, чтобы его описали не только для Шерлока, но и для appcompat:
Высота панели действий с помощью appCompat
Довольно похоже на описание @Anthony, вы можете найти его с помощью следующего кода (я только что изменил идентификатор ресурса):
Предварительная проблема Sandwitch
Мне нужна была высота панели действий, потому что на устройствах до ICE_CREAM_SANDWITCH мой взгляд был перекрывающим панель действий. Я попытался установить android: layout_marginTop = "? Android: attr / actionBarSize", android: layout_marginTop = "? Attr / actionBarSize", установив перекрытие для view / actionbar и даже фиксированную высоту actionbar с пользовательской темой, но ничего не получалось. Вот как это выглядело:
К сожалению, я обнаружил, что с помощью метода, описанного выше, я получаю только половину высоты (я предполагаю, что панель опций не занята), поэтому для полного исправления isue мне нужно удвоить высоту панели действий, и все выглядит нормально:
Если кто-то знает лучшее решение (чем удвоение actionBarHeight), я буду рад сообщить мне, так как я пришел из разработки для iOS, и я обнаружил, что большинство вещей в представлении Android довольно сбивают с толку :)
С Уважением,
hris.to
источник
ActionBar.getHeight()
. В зависимости от ситуации, это может сработать и для вас.layout_gravity="center_vertical"
? Измените это на"bottom"
. Android 2.3 обрабатывает маржу в FrameLaoyut иначе, чем новые андроиды.Ответ @Anthony работает для устройств, которые поддерживают,
ActionBar
и для тех устройств, которые поддерживают толькоSherlock Action Bar
следующий метод.источник
com.actionbarsherlock.R.attr.actionBarSize
работал как для Android 2.3, так и для 4.0, так что, похоже, вы можете использовать это независимо от версии Android.я думаю, что самый безопасный способ будет:
источник
else if (true == getTheme().resolveAttribute( android.support.v7.appcompat.R.attr.actionBarSize, tv, true)) { actionBarHeight = TypedValue.complexToDimensionPixelSize( tv.data,getResources().getDisplayMetrics()); }
Чтобы установить высоту
ActionBar
вы можете создать новый,Theme
как этот:и установите это
Theme
для вашегоActivity
:источник
Ява:
XML:
источник
Если вы используете панель инструментов в качестве панели действий,
затем просто используйте layout_height панели инструментов.
источник
Вы можете использовать эту функцию, чтобы получить высоту панели действий.
источник
Этот вспомогательный метод должен пригодиться кому-то. Пример:
int actionBarSize = getThemeAttributeDimensionSize(this, android.R.attr.actionBarSize);
источник
Вы просто должны добавить это.
источник
Я нашел более общий способ обнаружить это:
где ' mainView ' - это корневой вид вашего макета.
Идея в основном состоит в том, чтобы получить Y-позицию главного окна, так как оно установлено прямо под панелью действий (или панелью инструментов).
источник
Высота панели действий зависит от применяемой темы. Если вы используете AppCompatActivity, высота в большинстве случаев будет отличаться от обычной активности.
Если вы используете AppCompatActivity, вы должны использовать R.attr.actionBarSize вместо android.R.attr.actionBarSize
источник
В xml вы можете использовать? Attr / actionBarSize, но если вам нужен доступ к этому значению в Java, вам нужно использовать следующий код:
источник
Готовый способ выполнить самый популярный ответ:
источник
Вот обновленная версия с Kotlin, которую я использовал, предполагая, что телефон выше, чем Honeycomb:
источник
Если вы используете Xamarin / C #, это код, который вы ищете:
источник
источник
Простой способ найти высоту панели действий - из
onPrepareOptionMenu
метода Activity .источник
В javafx (используя Gluon) высота устанавливается во время выполнения или что-то в этом роде. В то время как возможность получить ширину, как обычно, ...
double width = appBar.getWidth();
Вы должны создать слушателя:
GluonApplication application = this;
... И принять самое последнее значение, на которое оно изменилось. Чтобы получить высоту.
источник
Попробовав все, что там было безуспешно, я случайно обнаружил функциональный и очень простой способ получить высоту панели действий по умолчанию.
Проверено только в API 25 и 24
C #
Ява
источник