6

Ho letto della barra degli strumenti che entra nella libreria AppCompat e di tutte le sue funzionalità. Alcune delle cose che ho notato nel blog Android Developers (here) è:ActionBar vs Toolbar o ActionBar e barra degli strumenti

Toolbar è pienamente supportato in AppCompat e ha caratteristica e API parità con il widget quadro.

Hanno anche menzionato che possiamo avere maggiore controllo sul suo aspetto e aspetto.

Ma, quando aggiungo un'attività in Android Studio sto ottenendo questo:

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

Qui Toolbar è all'interno AppBar. (ActionBar e AppBar sono uguali. Non è vero?) A che cosa serve. In alcuni blog leggo anche che AppBar può essere sostituito con la barra degli strumenti delle librerie di supporto alla progettazione.

Normalmente si ottiene content_layout dopo la barra degli strumenti. quindi avremo la barra sottostante dopo la barra degli strumenti.

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

Quindi, una volta che ho avuto un problema che il contenuto è al di sopra della barra degli strumenti (utilizzato solo barra degli strumenti, non appbar all'interno) si nasconde tutta la barra degli strumenti, e ancora cliccabile. Quindi ho dovuto spostare Toolbar sotto il mio contenuto in codice per farlo apparire sopra il mio contenuto.

Quindi, che cosa usare? Toolbar? AppBarLayout? Barra degli strumenti all'interno di AppBarLayout?

Qual è l'uso previsto di ciascuno?

UPDATE:

Così ho già aggiunto Barra degli strumenti nel file activity_layout. Quindi, perché è stato necessario utilizzare setSupportActionBar(toolbar); per impostare la barra degli strumenti e aggiungere il tema AppTheme.NoActionBar. Questo è un comportamento normale con tutte le attività in Android Studio.

Qual è l'uso di disattivazione barra delle operazioni finestra con

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

e l'impostazione con setSupportActionBar(toolbar)?

+3

Questo è uno dei migliori domande che abbia mai visto. Venendo da più di 10 anni di sviluppo professionale e lavorando con molti linguaggi e framework di programmazione, devo dire che l'architettura e il design di Android sono davvero un rompicapo. Molte volte mi chiedo se le cose non potrebbero essere più semplici o più pulite? Ho adorato la tua domanda, perché chiedere "perché" è un aspetto molto importante della conoscenza, che SO non permette che succeda così tanto. –

+0

@SaeedNeamati Grazie :) – kirtan403

+0

@SaeedNeamati sono abbastanza d'accordo con te! lo sviluppo di Android è davvero terribile. – kokabi

risposta

4

AppBarLayout è un contenitore, in cui è possibile inserire ToolBar, TabLayout, qualcos'altro forse. Tutto questo verrà mostrato sulla parte superiore dello schermo, non importa quello che il layout che si utilizza per il resto del contenuto. È possibile utilizzare Toolbar senza AppBarLayout se si vuole, ma poi avrete bisogno di includere nel vostro ViewGroup che si utilizza il resto del contenuto. E posizionalo sul fondo, in modo che non venga sovrapposto a qualcos'altro.

AppBar si salva da questo e fornisce alcune funzionalità aggiuntive, per esempio, lo scorrimento comportamento. E 'scritto here btw.

Si noti inoltre, che AppBarLayout dipende fortemente essere usato come un figlio diretto all'interno di una CoordinatorLayout. Se si utilizza AppBarLayout all'interno di un diverso ViewGroup, la maggior parte di esso è la funzionalità non funzionerà.

+0

Grazie, quindi AppBarLayout può includere tutti i normali widget come Relativelayout, ImageView, TextView ecc.? – kirtan403

+0

Si consideri un LinearLayout verticale. Quindi sì. – RexSplode

1

AppBarLayout è un LinearLayout verticale che implementa molte delle caratteristiche del concetto di barra delle applicazioni di disegni di materiali, ovvero i movimenti di scorrimento.

I bambini devono fornire il comportamento di scorrimento desiderato tramite setScrollFlags(int) e l'attributo di layout xml associato: app: layout_scrollFlags.

Questa visualizzazione dipende fortemente dall'essere utilizzata come figlio diretto all'interno di CoordinatorLayout. Se si utilizza AppBarLayout all'interno di un diverso ViewGroup, la maggior parte delle sue funzionalità non funzionerà.

AppBarLayout richiede anche un fratello di scorrimento separato per sapere quando scorrere. Il binding viene eseguito tramite la classe di comportamento AppBarLayout.ScrollingViewBehavior, il che significa che è necessario impostare il comportamento della visualizzazione a scorrimento come istanza di AppBarLayout.ScrollingViewBehavior. È disponibile una risorsa stringa contenente il nome completo della classe.

È inoltre attuare come qui di seguito bambino come multiplo di 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> 

Fonte: AppBarLayout

Vedi anche Structure of AppBarLayout

+0

Questa è la copia esatta dal sito degli sviluppatori Android – kirtan403

+0

Sì. Ho già dato un riferimento nella mia risposta. Inserisco il codice e la descrizione nella mia risposta che ti aiuterà nel caso in cui il contenuto del link principale cambierà o potrebbe essere rimosso. – pRaNaY

Problemi correlati