wake-up-neo.com

toolbar-Höhe programmgesteuert für Android einstellen

Ich versuche, die Höhe der Symbolleiste auf folgende Weise programmgesteuert einzustellen:

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

Es verursacht jedoch eine schwerwiegende Ausnahme mit diesem Protokoll -> Android.widget.relativelayout$layoutparams cannot be cast to Android.support.v7.Toolbar$layoutparams

Ich versuche auch diese Variante:

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

Es gibt keine Ausnahme, aber es funktioniert auch nicht und die Symbolleiste erhält ihre Standardhöhe anstelle der von mir definierten Höhe. Das Einstellen der Parameter in xml funktioniert natürlich, aber ich muss auch die Höhe in Java einstellen.

Helfen Sie mir bitte, das Problem zu lösen. 

10
Veka

Versuche dies - 

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

Es funktioniert gut für mich.

Wenn der obige Code immer noch nicht funktioniert, fügen Sie diese Zeile am Ende hinzu. 

mToolbar.requestLayout();

Die obige Zeile zwingt Ihre Toolbar, alles neu zu messen. Ihr Code funktioniert möglicherweise nicht, da Sie versuchen, die Höhe zu ändern, nachdem das Layout aufgeblasen wurde. In diesem Fall müssen Sie Ihre View dazu zwingen, alles neu zu messen. Schauen Sie sich die folgenden Methoden für weitere Informationen an - requestLayout (), invalidate () und forceLayout (). Während Sie die LayoutParams unterwegs ändern, sind diese drei Methoden zwar praktisch, aber zu einem hervorragenden Preis. Wenn Ihr Layout sehr umfangreich ist und viele untergeordnete Ansichten enthält, wirkt sich das Aufrufen einer dieser Methoden auf die Leistung Ihrer App aus, insbesondere auf Geräten der unteren Klasse. Stellen Sie daher sicher, dass Sie diese Methoden sehr sorgfältig anwenden.

Der von Ihnen erwähnte Absturz tritt auf, weil Ihre Toolbar eine untergeordnete Ansicht Ihrer Stammansicht ist und Ihre Stammansicht RelativeLayout ist. Ich hoffe es hilft.

Bitte folgen Sie der Antwort von Silambarasan Poonguti nicht als etwas mehrdeutig. LayoutParams Casting ist erforderlich, wenn Sie auf untergeordnete LayoutParams zugreifen möchten. Sogar View hat eigene LayoutParams, Sie müssen sie in übergeordnetes Layout oder Root-LayoutParams umwandeln. Wenn Ihre Toolbar eine untergeordnete Ansicht von RelativeLayout ist, wird die Anwendung von LayoutParams in Toolbar umgruppiert. Mit LayoutParams wird die App zum Absturz gebracht, und Sie müssen die LayoutParams in RelativeLayout.LayoutParams umwandeln

14
Varundroid

Versuche dies...

Toolbar hat eigene LayoutParams . Sie können es nicht in RelativeLayout werfen. 

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

Wenn Sie die Höhe der Symbolleiste zur Laufzeit einstellen möchten, tun Sie dies einfach wie folgt:

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

Viel Spaß beim Kodieren ...

Um den Fehler zu vermeiden, müssen Sie ViewGroup.LayoutParams verwenden, da Android.support.v7.Toolbar damit zusammenarbeitet und bei mToolbar.getLayoutParams(). zurückgegeben wird.

0
Matias