私はこの方法でプログラムでツールバーの高さを設定しようとしています:
toolbar.setLayoutParams(new Toolbar.LayoutParams(LayoutParams.MATCH_PARENT, 42));
toolbar.setMinimumHeight(42);
ただし、このログで致命的な例外が発生します-> Android.widget.relativelayout$layoutparams cannot be cast to Android.support.v7.Toolbar$layoutparams
私もこのバリアントを試します:
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) toolbar.getLayoutParams();
params.height = 42;
toolbar.setLayoutParams(params);
toolbar.setMinimumHeight(42);
それは例外を与えませんが、それも機能せず、ツールバーは私の定義した代わりにデフォルトの大きな高さを取得します。しかし、もちろんxml
でパラメータを設定することはできますが、高さをJavaでも設定する必要があります。
だから私が問題を解決するのを助けてください。
これを試して -
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mToolbar.getLayoutParams();
layoutParams.height = 42;
mToolbar.setLayoutParams(layoutParams);
それは私にとってはうまくいきます。
上記のコードがそれでも機能しない場合は、最後にこの行を追加してみてください-
mToolbar.requestLayout();
上記の行は、ツールバーにすべてを再測定させます。レイアウトが膨らんだ後に高さを変更しようとしているため、コードが機能していない可能性があります。その場合、ビューにすべてを再測定させる必要があります。詳しくは、requestLayout()、invalidate()、forceLayout()の各メソッドをご覧ください。実行中にLayoutParamsを変更している間、これらの3つの方法は便利ですが、価格が高くなります。レイアウトが非常に重く、その中に多数の子ビューがある場合、これらのメソッドのいずれかを呼び出すと、特にローエンドデバイスでのアプリのパフォーマンスに影響します。したがって、これらの方法を本当に注意深く使用するようにしてください。
ツールバーはルートビューの子ビューであり、ルートビューはRelativeLayoutであるため、前述のクラッシュが発生しています。それが役に立てば幸い。
また、Simbarasanan Poongutiの回答は少しあいまいなので、フォローしないでください。子LayoutParamsにアクセスしようとしている場合は、LayoutParamsキャストが必要です。ビューにも独自のLayoutParamsがあります。たとえば、親またはルートLayoutParamsにキャストする必要があります。 ToolbarがRelativeLayoutの子ビューの場合、LayoutParamsをToolbar.LayoutParamsにキャストするとアプリがクラッシュし、LayoutParamsをRelativeLayout.LayoutParamsにキャストする必要があります
これを試して...
ツールバーには独自の LayoutParams があります。 RelativeLayoutにキャストすることはできません。
Toolbar.LayoutParams params = (Toolbar.LayoutParams)mToolbar.getLayoutParams();
params.height = 42;
mToolbar.setLayoutParams(params);
実行時にツールバーの高さを設定したい場合は、次のようにします。
int expected_height = your value;
mToolbar.setMinimumHeight(expected_height );
ハッピーコーディング...
エラーを回避するには、_ViewGroup.LayoutParams
_を使用してmToolbar.getLayoutParams().
で返すため、_Android.support.v7.Toolbar
_を使用する必要があります。