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