6

Ich habe über die Symbolleiste in der AppCompat-Bibliothek und alle ihre Funktionen gelesen. Einige der Dinge, die ich in Android-Entwickler-Blog bemerkt haben (here) ist:ActionBar vs Toolbar oder ActionBar und Toolbar

Toolbar vollständig in AppCompat unterstützt und hat Eigenschaft und API Parität mit dem Framework-Widget.

Sie haben auch erwähnt, dass wir mehr Kontrolle über sein Aussehen und Aussehen haben können.

Aber, wenn ich eine Tätigkeit im Android Studio hinzufügen ich dies immer:

<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> 

Hier Toolbar ist innerhalb AppBar. (ActionBar und AppBar sind gleich. Oder?) Was nützt das? In einigen Blogs habe ich auch gelesen, dass AppBar durch die Symbolleiste der Design-Support-Bibliotheken ersetzt werden kann.

Normalerweise erhalten Sie content_layout nach Ihrer Toolbar. Also werden wir unterhalb der Zeile nach der Symbolleiste haben.

<include layout="@layout/content_myactivity" /> 

Also, wenn ich ein Problem hatte, dass der Inhalt über Symbolleiste versteckt die gesamte Symbolleiste und noch anklickbare (nur Symbolleiste nicht in appbar verwendet). Also musste ich die Toolbar unterhalb meines Inhalts im Code verschieben, damit sie über meinem Inhalt erschien.

Also, was zu verwenden? Symbolleiste? AppBarLayout? Symbolleiste in AppBarLayout?

Was ist der Verwendungszweck eines jeden?

UPDATE:

So habe ich bereits hinzugefügt Toolbar in der activity_layout Datei. Warum musste dann setSupportActionBar(toolbar); verwendet werden, um die Symbolleiste zu setzen und das Thema AppTheme.NoActionBar hinzuzufügen. Dies ist ein normales Verhalten bei allen Aktivitäten in Android Studio.

Was ist die Verwendung von Sperren Fenster Aktionsleiste mit

<item name="windowActionBar">false</item> 

und es mit setSupportActionBar(toolbar) Einstellung?

+3

Dies ist einer der besten Fragen, die ich je gesehen habe. Ich komme aus mehr als 10 Jahren professioneller Entwicklung und arbeite mit vielen Programmiersprachen und Frameworks. Ich muss sagen, dass die Architektur und das Design von Android wirklich schmerzhaft sind. Viele Male frage ich mich, könnten Dinge nicht einfacher oder sauberer sein? Ich liebte deine Frage, denn zu fragen, "warum" ist ein sehr wichtiger Aspekt des Wissens, dass SO nicht so viel passieren lässt. –

+0

@SaeedNeamati Vielen Dank :) – kirtan403

+0

@SaeedNeamati ich stimme dir ganz zu! Android-Entwicklung ist wirklich schrecklich. – kokabi

Antwort

4

AppBarLayout ist ein Container, wo Sie ToolBar, TabLayout, etwas anderes vielleicht platzieren können. Alles wird oben auf dem Bildschirm angezeigt, unabhängig davon, welches Layout Sie für den Rest des Inhalts verwenden. Sie können Toolbar ohne AppBarLayout verwenden, wenn Sie möchten, aber dann müssen Sie es in Ihre ViewGroup, die Sie den Rest des Inhalts verwenden. Und lege es auf den Boden, damit es nicht mit etwas anderem überlagert wird.

AppBar spart Sie davon und bietet einige zusätzliche Funktionen, zum Beispiel Scroll-Verhalten. Es wird geschrieben here btw.

Beachten Sie auch, dass AppBarLayout hängt stark davon ab, als ein direktes Kind innerhalb einer CoordinatorLayout verwendet werden. Wenn Sie AppBarLayout in einem anderen ViewGroup verwenden, funktioniert die meiste Funktionalität nicht.

+0

Danke, also kann AppBarLayout alle normalen Widgets wie Relativayout, ImageView, TextView etc? – kirtan403

+0

Betrachten Sie es als eine vertikale LinearLayout. Also ja. – RexSplode

1

AppBarLayout ist eine vertikale LinearLayout, die viele der Funktionen von Material-Designs App-Bar-Konzept implementiert, nämlich Scroll-Gesten.

Kinder sollten ihr gewünschtes Scrollverhalten überund das zugehörige Layout-XML-Attribut bereitstellen: app: layout_scrollFlags.

Diese Ansicht hängt stark davon ab, als direktes Kind innerhalb einer CoordinatorLayout verwendet werden. Wenn Sie AppBarLayout innerhalb eines anderen ViewGroup verwenden, wird die meiste Funktionalität nicht funktionieren.

AppBarLayout erfordert auch einen separaten Scroll-Geschwister, um zu wissen, wann scrollen. Die Bindung erfolgt über die Verhaltensklasse AppBarLayout.ScrollingViewBehavior. Dies bedeutet, dass Sie das Verhalten der Scroll-Ansicht als Instanz von AppBarLayout.ScrollingViewBehavior festlegen sollten. Eine Zeichenfolgenressource, die den vollständigen Klassennamen enthält, ist verfügbar.

Sie implementieren im Folgenden auch als mehrere Kinder wie von 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> 

Quelle: AppBarLayout

Siehe auch Structure of AppBarLayout

+0

Dies ist die genaue Kopie von der Android-Entwickler-Website – kirtan403

+0

Ja. Ich habe bereits in meiner Antwort darauf hingewiesen. Ich habe Code und Beschreibung in meine Antwort eingefügt, die hilft, wenn der Hauptlinkinhalt geändert oder entfernt wird. – pRaNaY

Verwandte Themen