ActionBar на Android 2.1+ с помощью SupportLibrary
Недавно я писал о том, что Google добавил поддержку ActionBar в свою Support Library. Думаю, стоит рассказать, как же им пользоваться. Под катом — инструкция по правильному импорту библиотеки в свой проект и основные моменты использования SupportActionBar.
Импорт библиотеки
Чтобы наш ActionBar был виден на старых устройствах, нужно наследовать тему приложения от Theme.AppCompat. Сама собой она ниоткуда не возьмётся, поэтому нужно создать проект библиотеки (оригинальная инструкция на английском для Eclipse и Android Studio здесь(смотреть пункт Adding libraries with resources)):
1. Сначала нужно убедиться, что у нас закачана последняя версия Support Library. Для этого открываем SDK Manager и листаем в самый низ, до папки Extras. В ней есть пункт Android Support Library – он то нам и нужен. Обновляем его до последней версии (сейчас – rev. 18), если не сделали этого раньше.
2. Обновили? Молодцы. Теперь нажимаем File > New > В папке Android выбираем Android Project from existing code.
3. Нажимаем кнопку Browse… и ищем нужную нам папку. Путь до неё примерно такой: /extras/android/support/v7/appcompat/. Выделяем появившийся пункт в списке и нажимаем Finish.
4. Теперь у вас в Project Explorer должен появиться проект android-support-v7-appcompat. Открываем его, в папке libs/ на обеих .jar – файлах кликаем правой кнопкой и нажимаем Build Path > Add to Build Path.
5. Щелчок правой кнопкой мыши по проекту, выбираем Build Path > Configure Build Path.
6. На странице Build Path во вкладке Order and Export отмечаем два только что добавленных .jar – файла и снимаем отметку с Android Dependencies.
7. Нажимаем ОК для сохранения изменений. Всё – библиотека готова к использованию!
Создание приложения
Теперь создадим проект своего приложения, которое мы и будем делать. Имя – SupportActionBarDemo, пакет – com.habrahabr.sabd, минимальный API level 7 (таковы требования библиотеки). Создаём Activity, имя – MainActivity, layout – main.
Теперь кликаем правой кнопкой мыши по этому проекту и нажимаем Properties. На странице Android под заголовком Library нажимаем Add и выбираем в появившемся окне android-support-v7-appcompat, затем – ОК и ещё раз ОК, чтобы сохранить изменения. Теперь библиотека добавлена в проект!
Простой пример
Прежде всего идём в res/values/styles.xml, res/values-v11/styles.xml, res/values-v14/styles.xml (спасибо DeusModus)и пишем
Теперь ActionBar будет виден на любых версиях андроида.
Открываем res/values/strings.xml и добавляем строки:
Открываем res/menus/main.xml и пишем там:
Обратите внимание на атрибуты xmlns:sabd=«schemas.android.com/apk/res-auto» и sabd:showAsAction – без них ActionBar будет неправильно работать. Иконки случайные, значения не имеют. Я всё-таки напишу, что означает атрибут sabd:showAsAction:
always — элемент всегда будет виден, если места не хватает, заголовок будет показан не полностью
ifRoom — элемент будет виден, только если для него есть место
never — элемент никогда не будет виден, для его показа нужно нажать кнопку Меню на устройстве или кнопку Overflow на ActionBar при отсутствии первой
withText -элемент будет показываться только с его заголовком
collapseActionView — элемент может сворачиваться в кнопку или разворачиваться на всю ширину Actionbar по нажатию, далее я приведу его пример
Теперь приступаем непосредственно к написанию кода. Первым делом в коде Activity нужно заменить extends Activity на extends ActionBarActivity и добавить её в импорт. В последних версиях ADT при создании Activity автоматически создаётся метод onCreateOptionsMenu(Menu menu), в котором мы и создаём меню:
Запускаем приложение и видим наш ActionBar:
Item 2 не отобразился, так как для него не хватило места. Item 3 ни при каких условиях не будет виден, потому что мы выставили атрибут sabd:showAsAction=«never». Добраться до них можно с помощью кнопки «Меню» на устройстве.
Обрабатывать нажатия на элементы меню можно там же, где и раньше — в методе onOptionsItemSelected(MenuItem item). Обрабатывать нажатия на иконку приложения можно в этом же методе, она имеет ID android.R.id.home. Чтобы добавить на ActionBar кнопку «Вверх» («Up Button»), нужно использовать метод ActionBar.setDisplayHomeAsUpEnabled(boolean showHomeAsUp):
Поиск
Иногда нужно сделать поиск, например, как в Google Play. На помощь приходит ActionView. Открываем res/menu/main.xml и удаляем 3 последних элемента — они нам не нужны, а место занимать будут. Вместо них добавляем один новый:
атрибут sabd:actionViewClass=«android.support.v7.widget.SearchView» обозначает, какой View будет использован вместо обычного. Текст collapseActionView в атрибуте sabd:showAsAction говорит о том, что ActionView может быть сворачиваться в кнопку или разворачиваться на всю ширину по нажатию. Чтобы использовать его в Activity, изменим код MainActivity:
Запускаем приложение и видим:
Нажимаем на кнопку поиска:
Кстати, клавиатура появляется автоматически. Выйти из режима поиска можно, нажав на кнопку Вверх в левой части ActionBar или нажав на аппаратную кнопку назад.
В методе onQueryTextChange() мы получаем текст из поля ввода, когда пользователь набирает очередную букву. В методе onQueryTextSubmit(String text) нам даётся текст, который пользователь ищет. У SearchView есть такие полезные методы:
setQuery(CharSequence query, boolean submit) — изменяет текст в поле ввода на тот, который ему передают, опционально делает его конечным (начинает поиск)
getQuery() — возвращает текст, который сейчас есть в поле ввода
setQueryHint(CharSequence hint) — изменяет подсказку на ту, которую ему передают
getQueryHint() — возвращает подсказку
setSuggestionsAdapter(CursorAdapter adapter) — добавляет выпадающий список, как у AutoCompleteTextView
getSuggestionsAdapter() — возвращает адаптер этого списка
setOnCloseListener(SearchView.OnCloseListener listener) — ставит на него обработчик закрытия
setOnSuggestionListener(SearchView.OnSuggestionListener listener) — ставит на него обработчик нажатия на элемент выпадающего списка
Заключение
А ребята из гугла молодцы, не забывают о поддержке старых версий своей ОС. Например, фрагменты, ViewPager и NavigationDrawer с API v4 доступны, Actionbar – с API v7. Хотя мне кажется, что всё это было сделано ради Android 2.3, а более ранние платформы – так, «за компанию».
Буду рад, если эта статья кому-нибудь поможет 🙂
Часть 2 — Навигация с помощью вкладок и выпадающего списка
Часть 3 — Дополнительные функции
Источник
ActionBarActivity: невозможно разрешить тип
Я новичок в программировании на Android. Я следую этому учебнику, чтобы добавить ActionBar в мою Main_Activity, используя объяснение в разделе» Поддержка Android 2.1 и выше.
Я последовал за этим учебным курсом, чтобы добавить библиотечный проект. Затем после добавления библиотеки в пункте «Добавить библиотеку в ваш проект приложения: я чувствовал себя потерянным.. в основном потому, что у меня нет опции» добавить «самостоятельно в моем Eclipse..
однако я нажал на «добавить библиотеку» и перешел на..
теперь, когда я меняю Activity на ActionBarActivity :
в моей mainActivity.java, это дает мне ошибку (красная строка ниже имени ActionBarActivity и всех методов и некоторых функций).. и снова, когда я меняю:
в манифесте, это также дает мне сообщение об ошибке: не найден ресурс, который соответствует указанному имени..
Я полностью потерял. что я сделал не так?
ОТВЕТЫ
Ответ 1
Не похоже, что вы импортировали библиотеку правильно, особенно когда вы говорите at the point Add the library to your application project: I felt lost .. basically because I don’t have the «add» option by itself .. however I clicked on «add library» and moved on ..
в eclipse вам нужно щелкнуть правой кнопкой мыши по проекту, перейдите в Свойства, выберите Android в списке, затем Добавить, чтобы добавить библиотеку
следуйте этому руководству в документах
Ответ 2
Проверьте, есть ли у вас файл android-support-v4.jar в вашей папке проекта project, его следует удалить!
В учебнике, когда вы выполнили инструкции Adding libraries WITHOUT resources перед выполнением coorect Adding libraries WITH resources , вы получите ту же ошибку.
(Не знаю, почему кто-то сделал бы что-то вроде этого * lookawayfrommyself * ^^)
Итак, что исправить это в моем случае, удалял android-support-v4.jar из ВАШЕГО ПРОЕКТА (не проект android-support-v7-appcompat), так как это вызвало некое столкновение библиотек ( возможно, потому что в то же время появилась новая версия библиотеки suport).
Еще один случай, когда эта ошибка может появиться.
Ответ 3
Этот способ работает для меня с Eclipse в инструменте разработчика Android от Google -righ click — свойство — путь сборки java — добавление внешнего JAR
укажите: android-support-v7-appcompat.jar в /sdk/extras/android/support/v 7/appcompat/libs
Ответ 4
и хотя я сделал все в учебнике, как только «extends Action» будет изменено на «extends ActionBarActivity», в Eclipse появятся всевозможные ошибки, в том числе «ActionBarActivitycannot быть разрешен к типу»
Ни одно из вышеперечисленных решений не работало для меня, но что работа добавила эту строку вверху:
Ответ 5
Вместо копирования/вставки кода из учебника используйте предложение кода в среде IDE. Начните вводить «extends ActionBar. «, он предложит «ActionBarActivity» нажать «Enter». Это сработало для меня!
Ответ 6
Добавьте эту строку в зависимости от build.gradle :
Ответ 7
У меня такая же проблема, но все усложнилось, когда я добавил несколько других библиотек, таких как appcompat.v7, recyclerView, CardView.
Удаление appcompat.v4 из lib не сработало для меня.
Мне нужно было создать проект с самого начала и первым шагом, который я сделал, это удалить appcompat.v4 из папки libs, и это сработало.
Я только что начал проект, поэтому создание нового проекта для меня не было большой проблемой!
Ответ 8
UPDATE
С версии 22.1.0 класс ActionBarActivity устарел, поэтому вместо этого используйте AppCompatActivity. Для более подробной информации см. Здесь
Использование ActionBarActivity:
1 — Убедитесь, что проект библиотеки (appcompat_v7) открыт и правильно указан (добавлен как библиотека) в проект приложения.
2 — Удалите android-support-v4.jar из папки проекта libs (если присутствует jar).
3 — Appcompat_v7 должен иметь поддержку android-support-v4.jar и android-support-v7-appcompat.jar в папке libs. (Если jars нет, скопируйте их из папки /sdk/extras/android/support/v 7/appcompat/libs вашего установленного android sdk location)
4- Проверьте, правильно ли импортирован ActionBarActivity.
Просто добавьте зависимости компиляции к app build.gradle
Ответ 9
В вашей папке «andrroid-sdk» есть ошибка. Вы выбрали некоторые функции при создании нового проекта, для которого требуются некоторые компоненты для импорта. Необходимо загрузить специальную библиотеку Android и поместить ее в папку android-sdk . Для меня это прекрасно работает: 1-Создать папку с именем extras в папке android-sdk 2-Создать папку с именем android в extras 3- Download этот файл (в моем случае мне нужна эта библиотека) 4-разархивируйте его и скопируйте содержимое (папку поддержки) в текущую папку android 5-закрыть Eclipse и запустить его снова 6 — снова создайте свой проект
Я надеюсь, что это сработает для вас.
Ответ 10
Для Eclipse измените project.properties следующим образом: (ваш путь)
И удалите файл android-support-v4.jar в вашей папке проекта libs .
Источник