web-dev-qa-db-fra.com

Comment déclarer une barre de hauteur / barre d'action étendue sur Android Lollipop?

J'ai vu hauteur étendue la barre d'application dans les instructions de Google Design Barre d'application . Comment les implémenter dans Android Lollipop?

87
Chris Banes

Pour ce faire, vous devez utiliser le nouveau widget Toolbar . La barre d’outils a un traitement spécial pour sa hauteur minimale afin de déclarer la quantité d’espace utilisée pour les boutons (et les actions).

Dans l'exemple ci-dessous, nous définissons la hauteur à 128dp (ce qui correspond à 56dp + 72dp tel que défini dans la spécification), mais en conservant le Android:minHeight en tant que norme actionBarSize (qui est généralement de 56dp). Cela signifie que les boutons et les actions sont contraints de se positionner verticalement dans les 56dp supérieurs. On peut alors utiliser Android:gravity pour positionner le titre en bas.

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

Si vous utilisez AppCompat, changez la déclaration pour utiliser Android.support.v7.widget.Toolbar à la place et utilisez ses attributs.

142
Chris Banes

Merci pour votre question, sa réponse, et surtout pour l'implémentation de la barre d'outils en natif et de la bibliothèque de support :)

Et on peut jouer plus. Au moment de l'exécution, nous pouvons jouer avec la hauteur et la hauteur minimale.

La hauteur est la hauteur de la barre d'outils, c'est simple, tout le monde le comprend, et la gravité agit en fonction de cette hauteur.

Le minimumHeight est plus délicat et ne devrait pas être au minimum de 56dp. Cette minHeight est utilisée pour placer la ligne de votre menuItem. Cette ligne est au milieu de votre minHeight.

Vous pouvez donc ajouter ce code à votre activité pour constater vous-même la différence. :)

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);
    }

Où la barre d'outils est:

toolbar = (barre d'outils) findViewById (R.id.toolbar);

En faisant cela, vous obtenez: enter image description here

mais si vous quittez l'animation continuez vous obtenez: enter image description here

C’est pourquoi, définir votre barre d’outils Android: layout_height sur wrap_content est une bonne option dans la plupart des cas, car la barre d’outils adaptera sa hauteur en fonction de son contenu (et vous pourrez changer le contenu à l’exécution :)

Et c’est également ainsi que vous modifiez la taille de votre barre d’outils lors de l’exécution.

Merci Chris Banes pour le travail extraordinaire que vous avez accompli sur la barre d’action.