Android Lollipopで拡張高さのツールバー/アクションバーを宣言するにはどうすればよいですか?


回答:


144

これを実現するには、新しいツールバーウィジェットを使用する必要があります。ツールバーには、ボタン(およびアクション)に使用されるスペースの量を宣言するための最小の高さのための特別な処理があります。

以下の例では、高さを128dp(仕様で定義されているように56dp + 72dp)に設定していますがandroid:minHeight、を標準actionBarSize(通常は56dp)に維持しています。つまり、ボタンとアクションは上部の56 dpに垂直に配置されるように制限されています。次に、を使用android:gravityしてタイトルを下部に配置できます。

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

AppCompatを使用している場合は、android.support.v7.widget.Toolbar代わりに使用するように宣言を変更し、その属性を使用します。


3
使用layout_heightする方法がある場合、ここでモンスーンによって説明されている回避策も回避策ではありませんが、適切な方法ですか?code.google.com/p/android/issues/detail?id=77874
Thomas Keller

3
ディメンションの式も宣言できるようにしたいのですが、できません。
Chris Banes 2014年

37
ボーナスポイントについては、アクションバーのサイズを段階的に変更します。たとえば@dimen/action_bar_size_x2、電話では112 dp、タブレットでは128 dpを使用します
Roman Nurik

7
android:paddingBottombuttonGravity設定すると、奇妙な間隔が導入されbottomます。titleMarginBottom属性はありません、ここではより良いオプションのように思えますか?
Paul Burke

5
@RomanNurikカレンダーアプリの拡張ツールバーはどのように機能しますか?ヒント
Raghunandan

3

あなたの質問、その答え、そしてネイティブとサポートライブラリのツールバーの実装をありがとう:)

そして、もっと遊ぶことができます。実行時に、HeightとMinimalHeightを操作できます。

高さはツールバーの高さで、シンプルで、すべての人が理解し、重力はその高さに応じて作用します。

minimalHeightはよりトリッキーであり、56dp以上にすることはできません。このminHeightは、menuItemの行を配置するために使用されます。この線は、minHeightの中間にあります。

したがって、このコードをアクティビティに追加して、違いを自分で確認できます。:)

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

ツールバーの場所:

toolbar =(ツールバー)findViewById(R.id.toolbar);

これを行うと、以下が得られます。 ここに画像の説明を入力してください

ただし、アニメーションを終了すると、次のようになります。 ここに画像の説明を入力してください

これがツールバーのandroid:layout_heightをwrap_contentに設定することが、ほとんどの場合に適切なオプションである理由です。これは、ツールバーがコンテンツに応じて高さを調整するためです(実行時にコンテンツを変更できます:)。

これは、実行時にツールバーのサイズを変更する方法でもあります。

アクションバーで素晴らしい仕事をしてくれたChris Banesに感謝します。


@MohammadHadi私はpostICSが次のように定義されることを想像しています:boolean postICS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN;
dm78
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.