web-dev-qa-db-ja.com

CollapsingToolbarLayoutのタイトルを中央に配置する方法は?

setExpandTitleTextAppearanceを試しましたが、うまくいきませんでした。展開されたタイトルテキストを中央に配置します。

22
Javed Khatri

CollapsingToolbarLayoutで使用できる属性expandedTitleGravityがあり、展開されたタイトルテキストを中央に配置します。これをCollapsingToolbarLayoutに追加します。

app:expandedTitleGravity="bottom|center_horizontal"
65
androholic

私のユースケースでは、app:titleEnabled falseに、私はとにかくそれを必要としませんでした。その後、私の重力はツールバーレイアウト内で適切に尊重されました。

17

@Javed、私が間違っていたら修正してください。タイトルをツールバーの中央に配置したい場合、CollapsingToolbarLayoutは折りたたまれ、レイアウトはこのようなものになりますか?

    <Android.support.design.widget.CollapsingToolbarLayout
        Android:id="@+id/collapsing_toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginStart="48dp"
        app:expandedTitleMarginEnd="64dp"
        Android:fitsSystemWindows="true">

        <ImageView
            Android:id="@+id/image"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:scaleType="centerCrop"
            Android:fitsSystemWindows="true"
            app:layout_collapseMode="parallax"/>

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_collapseMode="pin" />

    </Android.support.design.widget.CollapsingToolbarLayout>

次に、このトリックを実行できます(アクティビティのonCreateで実行します)。

    try {
        Field declaredField = toolbar.getClass().getDeclaredField("mTitleTextView");
        declaredField.setAccessible(true);
        TextView titleTextView = (TextView) declaredField.get(toolbar);
        ViewGroup.LayoutParams layoutParams = titleTextView.getLayoutParams();
        layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
        titleTextView.setLayoutParams(layoutParams);
        titleTextView.setGravity(Gravity.CENTER_HORIZONTAL);
    } catch (Exception e) {
        //"Error!"
    }

重要なのは、ツールバー内のTextViewにはwidthプロパティ「コンテンツのラップ」があるため、「Match Parent」に変更する必要があるということです。 (このリフレクションの詳細を参照してください こちら

テスト済みAndroid 5.1.1およびAndroid 4.3(どこでもほとんど動作するはずです)

3

タイトルを折りたたんだ状態に中央揃えしようとしている場合は、使用できます

Android:paddingEnd="70dp"
Android:paddingRight="70dp"

このような:

<Android.support.design.widget.CollapsingToolbarLayout
            Android:id="@+id/collapsing_toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:paddingEnd="70dp"
            Android:paddingRight="70dp"
            app:collapsedTitleGravity="center_horizontal"        
            app:expandedTitleGravity="start"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <Android.support.v7.widget.Toolbar
                Android:id="@+id/toolbar"
                Android:layout_width="match_parent"
                Android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin">

            </Android.support.v7.widget.Toolbar>

        </Android.support.design.widget.CollapsingToolbarLayout>
2
Bogdan Ustyak

次の方法で、折りたたまれた状態と展開された状態の両方でタイトルの位置を調整できます

展開状態で、

app:expandedTitleGravity="center" 

折りたたまれた状態で、

app:collapsedTitleGravity="center"

これはあなたを助けるかもしれないと思う

1
Sharon Joshi

NguyễnHoàngAnhが上で言ったように、app:titleEnabled falseが魅力のように機能しました。

このオプションを有効にすると、レイアウトインスペクターでいくつか掘り下げた後、「Up」ボタンの直後のTextView内のToolbarの前に、疑わしい名前のないビューが常に追加されます(有効になっている場合) 。

したがって、レイアウトの重力が正しく機能していても、疑わしいビューがToolbar内の余分なスペースをすべて引き継ぎます。

1
bskim45

折りたたみ用のツールバーxmlの折りたたみにこれを含めます:app:collapsedTitleGravity="center_vertical|center_horizontal"

展開されたapp:expandedTitleGravity="center_vertical|center_horizontal"

0