1

Android 4.0 未満のデバイスで問題が発生しました。ActionBarSherlock のボタンが垂直方向に中央揃えにならないことがあります。これは Android 2.3.6 を実行しているデバイスで発生しており、4.0 以降を実行しているデバイスには影響しません。

ActionBarSherlock で非常に簡単なカスタム レイアウトを作成しました。そのカスタム レイアウト構造は、以下の XML に示されています。

ボタンを垂直方向に中央に配置できないレイアウト:

<Button
    android:id="@+id/button_action_next"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="NEXT"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:orientation="horizontal" >

    <ImageButton
        android:id="@+id/button_action_home"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@color/people_app_theme_color"
        android:gravity="center"
        android:maxHeight="30dp"
        android:src="@drawable/android_home"
        android:text="HOME"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@android:color/white" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:minHeight="48dp"
        android:text="TextView"
        android:textColor="@android:color/white" />
</LinearLayout>

<Button
    android:id="@+id/button_action_prev"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="PREV"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

そして、私は単にボタンを取得できません(button_action_nextそしてbutton_action_prevアクションバー内で垂直方向に中央に配置されます)

私は次のような結果を得ました:

ここに画像の説明を入力

ただし、同じアプリで、ActionBarSherlock の別のカスタム レイアウトを使用すると、奇妙なことに、ボタンが垂直方向の中央に非常にうまく配置される可能性があります。このカスタム レイアウトのレイアウトは次のようになります。

ボタンを垂直方向に中央揃えできるレイアウト:

<Button
    android:id="@+id/button_actionbar_done"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="DONE"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<Button
    android:id="@+id/button_actionbar_skip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="SKIP"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<TextView
    android:id="@+id/text_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_actionbar_skip"
    android:layout_alignBottom="@+id/button_actionbar_skip"
    android:layout_centerHorizontal="true"
    android:text="ENTER YOUR DETAILS"
    android:textColor="@android:color/white" />

作業レイアウトと非作業レイアウトの唯一の違いは、ボタンを中央に配置できないレイアウトには子が含まLinearLayoutれていることです。

だから私の質問は、どのような状況でもボタンが垂直方向に中央に配置されるようにするにはどうすればよいですか (スクリーンショットに表示されている結果を回避します)?

更新:私が試したこと

@nicopico のコメントとこの SO 投稿: Gravity and layout_gravity on Android に感謝します。レイアウトに適用layout_gravity="center"しましたが、ボタンがまだ垂直方向の中央に配置されていません。

4

1 に答える 1

0

OK、問題が発生しました。

ここに解決策があります

解決策 1

このレイアウトの中で、

<Button
    android:id="@+id/button_actionbar_done"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="DONE"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<Button
    android:id="@+id/button_actionbar_skip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:background="@color/people_app_theme_color"
    android:gravity="center"
    android:text="SKIP"
    android:textAppearance="?android:attr/textAppearanceSmall"
    android:textColor="@android:color/white" />

<TextView
    android:id="@+id/text_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button_actionbar_skip"
    android:layout_alignBottom="@+id/button_actionbar_skip"
    android:layout_centerHorizontal="true"
    android:text="ENTER YOUR DETAILS"
    android:textColor="@android:color/white" />

削除しました

android:layout_alignParentTop="true"

2 つのボタンで、適用されます。

android:layout_centerVertical="true"

両方のボタンに追加され、ActionBar 内で垂直方向に中央揃えできるようになりました

解決策 2

この投稿Android ActionBar: How to vertical align views in top によると

android:layout_marginBottomまたはをボタンに適用しandroid:paddingBottomて、ボタンを中央に配置できます。


ただしandroid:layout_centerVertical、数値にハードコードされていない方法を引き続き好みます。

于 2013-03-26T12:19:42.727 に答える