Come dichiaro una barra degli strumenti / barra delle azioni ad altezza estesa su Android Lollipop?


Risposte:


144

È necessario utilizzare il nuovo widget della barra degli strumenti per ottenere ciò. La barra degli strumenti ha una gestione speciale per la sua altezza minima per dichiarare la quantità di spazio utilizzata per i pulsanti (e le azioni).

Nell'esempio seguente, stiamo impostando l'altezza su 128 dpi (che è 56dp + 72dp come definito nelle specifiche), ma mantenendo android:minHeightlo standard actionBarSize(che di solito è 56dp). Ciò significa che i pulsanti e le azioni sono vincolati per essere posizionati verticalmente nei primi 56dp. Possiamo quindi utilizzare android:gravityper posizionare il titolo in basso.

<Toolbar
    android:id="@+id/toolbar"
    android:layout_height="128dp"
    android:layout_width="match_parent"
    android:minHeight="?android:attr/actionBarSize"
    android:background="?android:attr/colorPrimary"
    android:gravity="bottom" />

Se stai usando AppCompat, modifica la dichiarazione da usare android.support.v7.widget.Toolbarinvece e usa i suoi attributi.


3
Se l'utilizzo layout_heightè la strada da percorrere, mi aspetto che anche la soluzione descritta dal monsone qui non sia una soluzione alternativa, ma la strada giusta da percorrere? code.google.com/p/android/issues/detail?id=77874
Thomas Keller

3
Mi piacerebbe poter dichiarare espressioni anche per le dimensioni, ma non possiamo.
Chris Banes

37
Per i punti bonus, ridimensionare la barra delle azioni utilizzando incrementi, ad esempio @dimen/action_bar_size_x2, e utilizzare 112dp sui telefoni, 128dp sui tablet
Roman Nurik

7
android:paddingBottomintroduce strane spaziature quando buttonGravityè impostato su bottom. L' titleMarginBottomattributo sembra l'opzione migliore qui, no?
Paul Burke

5
@RomanNurik come funziona la barra degli strumenti espansa nell'app di calendario? Eventuali suggerimenti
Raghunandan

3

Grazie per la tua domanda, la sua risposta e inoltre per l'implementazione della barra degli strumenti nella libreria nativa e di supporto :)

E possiamo giocare di più. Possiamo, in fase di esecuzione, giocare con Height e MinimalHeight.

L'altezza è l'altezza della ToolBar, è semplice, ogni corpo lo capisce e la gravità agisce in base a quell'altezza.

MinimalHeight è più complicato e non dovrebbe essere al minimo di 56dp. Questo minHeight viene utilizzato per posizionare la riga del menuItem. Questa linea è al centro del tuo minHeight.

Quindi puoi aggiungere questo codice alla tua attività per vedere da solo la differenza. :)

Runnable toolBarAnimator=new Runnable() {
        @Override
        public void run() {
            if(postICS){
//                toolbar.setTranslationX(iteration);
//                toolbar.setElevation(iteration);
                toolbar.setMinimumHeight(iteration * 5);
                toolbar.getLayoutParams().height++;
            }
            uiThreadHanlder.postDelayed(this,16);
            iteration++;
            if(iteration>150)iteration=0;
        }
    };
    Handler uiThreadHanlder=new Handler();
    int iteration=0;


    @Override
    protected void onResume() {
        super.onResume();
        //launch the animation
        uiThreadHanlder.postDelayed(toolBarAnimator, 1000);
    }


    @Override
    protected void onPause() {
        super.onPause();
        //stop the animation
        uiThreadHanlder.removeCallbacks(toolBarAnimator);
    }

Dove si trova la barra degli strumenti:

toolbar = (Toolbar) findViewById (R.id.toolbar);

Quando si esegue questa operazione si ottiene: inserisci qui la descrizione dell'immagine

ma se esci dall'animazione continua ottieni: inserisci qui la descrizione dell'immagine

Questo è il motivo per cui impostare la barra degli strumenti android: layout_height su wrap_content è una buona opzione nella maggior parte dei casi, perché la barra degli strumenti adatterà la sua altezza in base al suo contenuto (e puoi modificare il contenuto in fase di esecuzione :)

E questo è anche il modo in cui modifichi la dimensione della barra degli strumenti in fase di esecuzione.

Grazie Chris Banes per lo straordinario lavoro che hai svolto sulla barra delle azioni.


@MohammadHadi Immagino che postICS sarebbe definito qualcosa del tipo:boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
dm78
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.