Я пытаюсь использовать следующий код для центрирования текста в ActionBar
, но он выравнивается по левому краю.
Как сделать так, чтобы он появился в центре?
ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setTitle("Canteen Home");
actionBar.setHomeButtonEnabled(true);
actionBar.setIcon(R.drawable.back);
android
android-actionbar
android-theme
Сураб Салди
источник
источник
Ответы:
Чтобы иметь центрированный заголовок в ABS (если вы хотите, чтобы это было по умолчанию
ActionBar
, просто удалите «поддержку» в именах методов), вы можете просто сделать это:В вашей деятельности, в вашем
onCreate()
методе:abs_layout
:Теперь у вас должен быть
Actionbar
только заголовок. Если вы хотите установить собственный фон, установите его в макете выше (но не забудьте установитьandroid:layout_height="match_parent"
).или с:
источник
android:layout_gravity="center"
в LinearLayout.((TextView)actionBar.getCustomView().findViewById(R.id.textView1)).setText("new title");
, где textView1 - вашTextView
ID в вашем CustomView.У меня не было особого успеха с другими ответами ... ниже именно то, что сработало для меня на Android 4.4.3 с использованием ActionBar в библиотеке поддержки v7. Я настроил его для отображения значка панели навигации ("кнопка меню бургера")
XML
Ява
источник
params
объект ?? Можем ли мы не указать гравитацию во внешнем файле макета, который мы назначаем ActionBar.Определите свое собственное представление с текстом заголовка, затем передайте LayoutParams в setCustomView (), как говорит Сергий.
EDITED : по крайней мере, для ширины вы должны использовать WRAP_CONTENT или панель навигации, значок приложения и т. Д. НЕ БУДЕТ ПОКАЗАНО (настраиваемый вид отображается поверх других представлений на панели действий). Это произойдет, особенно когда не отображается кнопка действия.
РЕДАКТИРОВАТЬ : эквивалент в макете xml:
Для этого не требуется указывать LayoutParams.
источник
Просто быстрое дополнение к ответу Ахмада. Вы не можете больше использовать getSupportActionBar (). SetTitle при использовании настраиваемого представления с TextView. Итак, чтобы установить заголовок, когда у вас есть несколько действий с этим настраиваемым ActionBar (используя этот один xml), в вашем методе onCreate () после назначения настраиваемого представления:
источник
ХОРОШО. После долгих исследований, в сочетании с принятым ответом выше, я придумал решение, которое также работает, если у вас есть другие вещи на панели действий (кнопка назад / домой, кнопка меню). Итак, в основном я поместил методы переопределения в базовое действие (которое распространяется на все остальные действия) и поместил туда код. Этот код устанавливает заголовок каждого действия, как он представлен в AndroidManifest.xml, а также выполняет некоторые другие настраиваемые параметры (например, настройку настраиваемого оттенка для кнопок панели действий и настраиваемый шрифт для заголовка). Вам нужно только опустить гравитацию в action_bar.xml и вместо этого использовать отступы.
actionBar != null
используется проверка, так как она есть не во всех моих действиях.Проверено на 4.4.2 и 5.0.1
А мой action_bar.xml такой (если кому интересно):
РЕДАКТИРОВАТЬ : Если вам нужно изменить заголовок на что-то еще ПОСЛЕ загрузки активности (onCreateOptionsMenu уже был вызван), поместите другой TextView в свой action_bar.xml и используйте следующий код для «прокладки» этого нового TextView, установите текст и покажите Это:
РЕДАКТИРОВАТЬ (25.08.2016) : это не работает с версией appcompat 24.2.0 (август 2016 г.), если у вашей активности есть «кнопка возврата». Я отправил отчет об ошибке (ошибка 220899 ), но не знаю, пригодится ли он (сомневаюсь, что он будет исправлен в ближайшее время). Между тем решение состоит в том, чтобы проверить, равен ли дочерний класс AppCompatImageButton.class, и сделать то же самое, только увеличив ширину на 30% (например, appCompatImageButton.getWidth () * 1.3 перед вычитанием этого значения из исходного заполнения):
Тем временем я добавил туда несколько проверок отступов / полей:
источник
без customview он может центрировать заголовок панели действий. он отлично работает и для навигационного ящика
Удачного кодирования. Спасибо.
источник
После долгих исследований: это действительно работает:
Вы должны определить макет custom_actionbar.xml, который соответствует вашим требованиям, например:
источник
Это прекрасно работает.
Ниже макета custom_actionbar:
источник
Вам нужно установить
ActionBar.LayoutParams.WRAP_CONTENT
иActionBar.DISPLAY_HOME_AS_UP
источник
Лучший и самый простой способ, особенно для тех, кому просто нужен текстовый вид с центром тяжести без какого-либо xml-макета.
источник
Код здесь работает для меня.
источник
Решение только для Kotlin, которое не требует изменения макетов XML:
источник
Вот полное решение Kotlin + androidx, основанное на ответе @Stanislas Heili. Надеюсь, это может быть полезно другим. Это для случая, когда у вас есть активность, в которой размещено несколько фрагментов, при этом одновременно активен только один фрагмент.
В вашей деятельности:
В ваших фрагментах:
источник
Другие учебные пособия, которые я видел, переопределяют весь макет панели действий, скрывая MenuItems. У меня это сработало, просто выполнив следующие шаги:
Создайте файл xml следующим образом:
А в классе сделайте это:
источник
Для пользователей Kotlin:
Используйте в своей деятельности следующий код:
И макет XML / ресурса:
источник
Этот код не скроет кнопку «Назад», при этом заголовок будет выровнен по центру.
вызовите этот метод в oncreate
источник