web-dev-qa-db-ja.com

プログラムでツールバーの高さを設定Android

私はこの方法でプログラムでツールバーの高さを設定しようとしています:

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でも設定する必要があります。

だから私が問題を解決するのを助けてください。

14
Veka

これを試して -

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にキャストする必要があります

17
Varundroid

これを試して...

ツールバーには独自の 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_を使用する必要があります。

0
Matias