Android studio actionbar кнопка назад

How to Add and Customize Back Button of Action Bar in Android?

The action bar (sometimes referred to as the app bar), if it exists for an activity, will be at the top of the activity’s content area, typically directly underneath the status bar. It is a menu bar that runs across the top of the activity screen in android. Android ActionBar can contain menu items that become visible when the user clicks the “menu” button. In general, an ActionBar composed of the following four components:

  • App Icon: App branding logo or icon will be shown here
  • View Control: A dedicated space to display the Application title. Also provides the option to switch between views by adding spinner or tabbed navigation
  • Action Buttons: Major actions of the app could be added here
  • Action Overflow: All unimportant action will be displayed as a menu

Below is a sample image to show where the Action Bar/Toolbar/App Bar is present on an android device.

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.

The action bar is a primary toolbar inside an activity that can be used to display an activity title and other interactive items. One of the most used items is a Back Navigation Button. The back button is used to move backward from the previously visited screen by the user. Most Android devices have a dedicated back button still a back button on the action bar enhances the user experience.

Источник

Как реализовать в ActionBar на Android кнопки «Назад»?

У меня есть деятельность с listview. Когда пользователь нажимает на элемент, открывается элемент «просмотр»:

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

8 ответов:

Селвин уже выложили правильный ответ, вот только решение в довольно код 😉

функции NavUtils.navigateUpFromSameTask(this) требуется определить родительскую активность в AndroidManifest.xml-файл

убедитесь, что ваша кнопка ActionBar Home включена в действии:

Android, API 5+:

ActionBarSherlock и App-Compat, API 7+:

Android, API 11+:

пример MainActivity что расширяет ActionBarActivity :

таким образом, все действия, которые вы хотите, могут иметь backpress.

Android, API 16+:

пример MainActivity что расширяет ActionBarActivity :

чтобы включить кнопку ActionBar back, Вам, очевидно, нужна панель действий в вашей деятельности. Это набор темы. Вы можете установить тему для своей деятельности в AndroidManfiest.xml . Если вы используете, например, @android:style/Theme.NoTitleBar тема, у вас нет панели действий. В этом случае вызов getActionBar() вернет null. Поэтому сначала убедитесь, что у вас есть панель действий.

следующий шаг-установить android:parentActivityName к деятельности, которую вы хотите перейти, если вы нажмете кнопку Назад. Это должно быть сделано в элемент AndroidManfiest.xml тоже.

Читайте также:  Snail bob для андроида

вы можете включить кнопку «Назад» в onCreate метод «детской» деятельности.

теперь вы должны реализовать логику для кнопки Назад. Вы просто переопределяете onOptionsItemSelected метод в вашей» дочерней «деятельности и проверьте идентификатор кнопки «Назад», которая android.R.id.home .

теперь вы можете запустить метод NavUtils.navigateUpFromSameTask(this); но если вы не указали android:parentActivityName В вы AndroidManfiest.xml это приведет к краху приложения.

иногда это то, что вы хотите, потому что его напоминает вам, что вы забыли «что-то», но если вы хотите, чтобы предотвратить это, вы можете проверить, если ваша деятельность имеет родителя с помощью getParentActivityIntent() метод. Если это возвращает null, вы не указали родителя.

в этом случае вы можете уволить onBackPressed() метод, который делает в основном то же самое, как если бы пользователь нажал кнопку назад на устройстве. Хорошая реализация, которая никогда не разбивает ваше приложение будет

обратите внимание, что анимация, которую видит пользователь, отличается от NavUtils.navigateUpFromSameTask(this); и onBackPressed() .

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

Источник

Как реализовать кнопку Android ActionBar назад?

У меня есть действие с listview. Когда пользователь нажимает на элемент, открывается элемент «viewer»:

это работает нормально, но на панели действий стрелка назад рядом со значком приложения не активируется. Я что-то упускаю?

8 ответов

Selvin уже опубликовал правильный ответ, вот только решение в довольно коде; -)

функции NavUtils.navigateUpFromSameTask(this) требуется определить родительскую активность в AndroidManifest.xml-файл

убедитесь, что кнопка ActionBar Home включена в действии:

Android, API 5+:

ActionBarSherlock и App-Compat, API 7+:

Android, API 11+:

пример MainActivity что расширяет ActionBarActivity :

таким образом, все действия, которые вы хотите, могут иметь backpress.

Android, API 16+:

пример MainActivity что расширяет ActionBarActivity :

чтобы включить кнопку ActionBar назад, вам, очевидно, нужна панель действий в вашей деятельности. Это набор темы. Вы можете установить тему для своей деятельности в AndroidManfiest.xml . Если вы используете e.g @android:style/Theme.NoTitleBar тема, у вас нет ActionBar. В этом случае вызов getActionBar() возвращают значение null. Поэтому сначала убедитесь, что у вас есть ActionBar.

следующий шаг-установить android:parentActivityName к деятельности, которую вы хотите перейти, если вы нажмете кнопку Назад. Это должно быть сделано в the AndroidManfiest.xml тоже.

вы можете включить кнопку «Назад» в onCreate метод «детской» деятельности.

теперь вы должны реализовать логику для кнопки Назад. Вы просто переопределяете onOptionsItemSelected метод в вашей» детской «деятельности и проверьте идентификатор кнопки «Назад», которая является android.R.id.home .

теперь вы можете запустить метод NavUtils.navigateUpFromSameTask(this); но если вы не указали android:parentActivityName В вы AndroidManfiest.xml это приведет к краху приложения.

Читайте также:  Плеер айс стрим для андроид

иногда это то, что вы хотите, потому что это напоминает вам, что вы забыли «что-то», но если вы хотите предотвратить это, вы можете проверить, есть ли у вашей деятельности родитель, используя getParentActivityIntent() метод. Если это возвращает null,вы не указали родителя.

в этом случае вы можете уволить onBackPressed() метод, который делает в основном то же, как если бы пользователь нажмите кнопку назад на устройстве. Хорошая реализация, которая никогда не crashs вы приложение будет

обратите внимание, что анимация, которую видит пользователь, отличается от NavUtils.navigateUpFromSameTask(this); и onBackPressed() .

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

Источник

Полный список

— размещаем элементы в ActionBar

Еще одно нововведение третьего Андроида – Action Bar. Это панель в верхней части приложения.

В этом уроке попробуем размещать там свои элементы с иконками и посмотрим, как с ними взаимодействовать. Тут нам все уже будет знакомо, т.к. используется механизм, который раньше строил меню. Т.е. мы в методе onCreateOptionsMenu получаем на вход объект Menu и (программно или с помощью XML) наполняем его элементами.

Для элементов будем указывать id, текст, иконку и режим показа.

Project name: P1071_ActionBarItems
Build Target: Android 4.1
Application name: ActionBarItems
Package name: ru.startandroid.develop.p1071actionbaritems
Create Activity: MainActivity

В strings.xml добавим строки:

В файл res\menu\main.xml напишем следующий текст:

С id, title и icon, думаю все понятно – это идентификатор, текст и иконка элемента. Иконки системные, выбранные случайно.

Нам тут больше интересен атрибут showAsAction, это режим показа элемента. Он может принимать значения:

never – не показывать элемент

ifRoom – показывать, если есть место

always – всегда показывать

К этим значениям может быть добавлено еще одно – withText. Актуально для элементов с указанной иконкой. В этом случае для элемента будет показана не только иконка, но и текст из title.

Думаю, комментарии тут особо не нужны. Все знакомое. Заполненный нами ранее xml-файл используется для создания элементов Menu.

Все сохраняем, запускаем приложение.

Отобразился item1 и item2.

Для item1 мы не указывали иконку, поэтому видим только текст. А в showAsAction мы указали always, т.е. система будет пытаться отобразить элемент, даже если не хватает места на ActionBar.

Для item2 мы указали иконку ic_menu_call, ее и видим в ActionBar. В showAsAction мы указали ifRoom, т.е. отображать, если есть свободное место. Место есть – элемент виден.

Жмем на эмуляторе menu и видим два оставшихся элемента. Они не отобразились в ActionBar и теперь доступны только так.

item3 не отобразился, т.к. ему не хватило места. Мы для него указывали showAsAction = ifRoom, т.е. отображать, если есть где. Для item2 место нашлось, а вот item3 не влез.

item4 не отобразился, т.к. мы указали showAsAction = never.

11.12.2017 Кнопки меню больше нет. Вместо нее в ActionBar есть кнопка Overflow (три точки), используйте ее, чтобы увидеть скрытые пункты меню.

Давайте увеличим место в ActionBar и посмотрим, что изменится. Для этого просто повернем экран в горизонтальную ориентацию – CTRL+F12.

Читайте также:  Exposed android 11 4pda

Для item1 и item2 ничего не изменилось. А вот для item3 теперь появилось местечко, и он вылез. Если для item2 отображена только иконка, то для item3 мы видим и текст. Это сказывается withText в атрибуте showAsAction.

item4 не виден несмотря на то, что есть куча места свободного. Причина — never в атрибуте showAsAction. Чтоб добраться до него, жмем menu.

overflow menu

Если запустить это же приложение на планшете, то увидим чуть другой интерфейс ActionBar:

Справа появляется кнопка, нажатие на которую аналогично нажатию на menu. Судя по всему, эта кнопка видна только на тех устройствах, на которых нет кнопки menu.

Как узнать текст элемента, если видна только иконка

Если для элемента показана только иконка, то долгим нажатием на нее можно добиться показа текста. Попробуем на item2:

На AVD с 4.1 это работает. На планшете с 3.2 – почему-то нет.

Как отключить ActionBar

Для этого в коде можно прописать:

Либо выбрать для Activity тему, содержащую текст NoActionBar.

Где обрабатывать нажатия на элементы

Там же, где и при работе с меню – метод onOptionsItemSelected. Все аналогично.

О кнопке Home

В левой части ActionBar находится кнопка Home. По умолчанию для нее используется иконка приложения или Activity. Мы можем поставить сюда свою иконку, не трогая текущие. Для этого используется атрибут android:logo у Activity или Application.

В третьем Андроиде кнопка Home кликабельна по умолчанию. В четвертом же ее надо явно задействовать методом setHomeButtonEnabled.

Поймать нажатие кнопки Home можно также в onOptionsItemSelected. Она имеет >

Насколько я понял по хелпу, назначение этой кнопки – перейти в коренное Activity программы, т.е. действительно кнопка «Домой». Также хелп говорит об еще одной логической возможности использования – как кнопка «Вверх». Т.е. не в корневое Activity, а на один логический уровень вверх. Например, из чтения письма переходим к списку писем. А для того, чтобы пользователь знал, что он попадет не Домой, а Вверх предлагается вешать на кнопку стрелочку методом setDisplayHomeAsUpEnabled.

В итоге выглядит это примерно так

На кнопке появилась стрелка.

Надо понимать, что эта стрелка – это просто изображение для пользователя, чтобы он знал, какое поведение ожидать от нажатия. А кодить весь процесс перехода Вверх надо самим. Как впрочем и процесс перехода Домой.

Напоследок еще несколько полезных методов для ActionBar:

setTitle – установить свой заголовок

setSubtitle — установить свой подзаголовок

setDisplayShowTitleEnabled – скрыть/показать заголовок и подзаголовок

На следующем уроке:

— используем навигацию в ActionBar

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Оцените статью