ActionBar vs Toolbar или ActionBar и панель инструментов
Я прочитал о панели инструментов в библиотеке AppCompat и всех ее функциях. Некоторые из вещей, которые я заметил в блоге разработчиков Android (здесь) составляет:
панель инструментов полностью поддерживается в AppCompat и имеет функцию и четность API в рамках виджет.
они также упомянули, что мы можем иметь больше контроля над своим внешним видом и внешним видом.
но, когда я добавляю активность в Android Studio, я получение этого:
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar_add_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.AppBarLayout>
здесь панель инструментов находится внутри AppBar. (ActionBar и AppBar одинаковы. Не так ли? Какой в этом смысл? В некоторых блогах я также читал, что AppBar можно заменить панелью инструментов библиотек поддержки дизайна.
обычно вы получаете content_layout после панели инструментов. таким образом, мы будем иметь ниже строки после панели инструментов.
<include layout="@layout/content_myactivity" />
Итак, как только у меня возникла проблема, что содержимое выше панели инструментов (используется только панель инструментов, а не внутри appbar) скрывает всю панель инструментов, и все еще кликабельна. Поэтому мне пришлось переместить панель инструментов ниже моего контента в коде, чтобы она появилась над моим контентом.
Итак, что использовать? Панель инструментов? AppBarLayout? Панель инструментов внутри AppBarLayout?
каково предназначение каждого из них?
обновление:
поэтому я уже добавил панель инструментов в файл activity_layout. Тогда зачем нужно было использовать setSupportActionBar(toolbar);
чтобы установить панель инструментов и добавить тему AppTheme.NoActionBar
. Это нормальное поведение со всеми действиями в Android Студия.
что такое использование отключения панели действий окна с
<item name="windowActionBar">false</item>
и установка его с setSupportActionBar(toolbar)
?
2 ответов
AppBarLayout
это контейнер, где вы можете разместить ToolBar
, TabLayout
, что-то еще может быть. Все это будет показано в верхней части экрана, независимо от того, какой макет вы используете для остальной части контента. Вы можете использовать Toolbar
без AppBarLayout
Если вы хотите, но тогда вам придется включить его в свой ViewGroup
, который вы используете, остального контента. И поместите его на дно, чтобы он не накладывался на что-то еще.
AppBar
спасает вас от этого и предлагает некоторые дополнительные функции, например, поведение прокрутки. Написано вот кстати.
также обратите внимание, что AppBarLayout
сильно зависит от использования в качестве прямого ребенка в CoordinatorLayout
. Если вы используете AppBarLayout
в другой ViewGroup
, большая часть его функциональности не будет работать.
AppBarLayout является вертикальным LinearLayout
который реализует многие функции концепции панели приложений material designs, а именно прокрутки жестов.
дети должны обеспечить желаемое поведение прокрутки через setScrollFlags(int)
и связанный атрибут XML макета: app: layout_scrollFlags.
это представление сильно зависит от использования в качестве прямого ребенка в CoordinatorLayout
. Если вы используете AppBarLayout в другом ViewGroup
, большая часть его функциональности не будет работа.
AppBarLayout также требует отдельного прокрутки брата, чтобы знать, когда прокручивать. Привязка выполняется через AppBarLayout.ScrollingViewBehavior
класс поведения, что означает, что вы должны установить поведение прокрутки в качестве экземпляра AppBarLayout.ScrollingViewBehavior
. Строковый ресурс, содержащий полное имя класса.
вы также реализуете, как показано ниже, как несколько дочерних AppBarLayout
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<!-- Your scrolling content -->
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:layout_height="wrap_content"
android:layout_width="match_parent">
<android.support.v7.widget.Toolbar
...
app:layout_scrollFlags="scroll|enterAlways"/>
<android.support.design.widget.TabLayout
...
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
источник: AppBarLayout
см. также структура AppBarLayout