web-dev-qa-db-fra.com

définir la hauteur de la barre d'outils par programme Android

J'essaie de définir la hauteur de la barre d'outils par programme de cette manière:

toolbar.setLayoutParams(new Toolbar.LayoutParams(LayoutParams.MATCH_PARENT, 42));
toolbar.setMinimumHeight(42);

Mais cela provoque une exception fatale avec ce journal -> Android.widget.relativelayout$layoutparams cannot be cast to Android.support.v7.Toolbar$layoutparams

J'essaye aussi cette variante:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) toolbar.getLayoutParams();
params.height = 42;   
toolbar.setLayoutParams(params);
toolbar.setMinimumHeight(42);

Cela ne donne pas d'exception, mais cela ne fonctionne pas non plus et la barre d'outils obtient par défaut une hauteur supérieure à celle définie. Mais bien sûr, définir les paramètres dans xml fonctionne, mais je dois également définir la hauteur en Java.

Alors aidez-moi à résoudre le problème. 

10
Veka

Essaye ça - 

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams();
layoutParams.height = 42;
mToolbar.setLayoutParams(layoutParams);

Ça fonctionne bien pour moi.

Si le code ci-dessus ne fonctionne toujours pas, essayez d'ajouter cette ligne à la fin - 

mToolbar.requestLayout();

La ligne ci-dessus forcera votre barre d’outils à tout réévaluer. Votre code peut ne pas fonctionner car vous essayez de modifier la hauteur après avoir gonflé la mise en page. Dans ce cas, vous devez forcer votre View à tout réévaluer. Observez les méthodes suivantes pour plus d'informations - requestLayout (), invalidate () et forceLayout (). Bien que vous puissiez modifier les LayoutParams à tout moment, ces trois méthodes sont pratiques, mais à un prix avantageux. Si votre mise en page est très lourde et contient de nombreuses vues enfant, le fait d'appeler l'une de ces méthodes affectera les performances de votre application, en particulier sur les périphériques les plus bas. Veillez donc à utiliser ces méthodes très attentivement.

Et le blocage que vous avez mentionné se produit car votre barre d'outils est une vue enfant de votre vue racine et que votre vue racine est RelativeLayout. J'espère que ça aide.

Veuillez également ne pas suivre la réponse de Silambarasan Poonguti, qui est un peu ambigu. Le casting de LayoutParams est nécessaire si vous essayez d’accéder à un enfant LayoutParams. Même View a ses propres LayoutParams, vous devez le convertir en parent ou racine LayoutParams par exemple. si votre barre d’outils est une vue enfant de RelativeLayout, alors transtyper LayoutParams en Toolbar.LayoutParams plantera l’application et vous devrez transtyper LayoutParams en RelativeLayout.LayoutParams.

14
Varundroid

Essaye ça...

La barre d'outils possède son propre LayoutParams . vous ne pouvez pas le lancer dans RelativeLayout. 

    Toolbar.LayoutParams params = (Toolbar.LayoutParams)mToolbar.getLayoutParams();
    params.height = 42;
    mToolbar.setLayoutParams(params);

Si vous souhaitez définir la hauteur de la barre d'outils au moment de l'exécution, procédez comme suit:

    int expected_height = your value;
    mToolbar.setMinimumHeight(expected_height );

Bonne codage ...

3

Pour éviter l'erreur, vous devez utiliser ViewGroup.LayoutParams, puisque Android.support.v7.Toolbar fonctionne avec et retourne le sur mToolbar.getLayoutParams().

0
Matias