web-dev-qa-db-ja.com

相対レイアウト重心が機能しない

ベースであるRelativeLayoutのいくつかのビューを水平方向に中央に配置しようとしています。

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:gravity="center_horizontal"
    Android:background="@Android:color/transparent" >

これは機能していません。ビューの1つに対してcenterInParenttrueに設定しましたが、それは機能しました。ただし、2つのビューを並べて中央に配置する必要があるため、このソリューションを使用できません。これを最適化しようとしているので、レイアウト、特に線形を互いに入れ子にしないようにします。

私が行方不明になっている明らかな何かがありますか?この属性はこの状況のた​​めに作られていると思いました。

13
Frank Sposaro

ネストされたViewGroupを使用せずに、3つのビューに関連する同様の問題に回答しました。

https://stackoverflow.com/a/13279846/1011746

これはAPI11でテストされています。

2ビュー水平ケースの場合:

<RelativeLayout
  Android:layout_width="fill_parent"
  Android:layout_height="fill_parent"
  Android:gravity="center"
  Android:background="@Android:color/black"
  >
  <Button
    Android:id="@+id/apply"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerInParent="true"
    Android:text="APPLY"
    Android:textSize="20sp"
    />
  <Button
    Android:id="@+id/undo"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerInParent="true"
    Android:text="UNDO"
    Android:textSize="20sp"
    Android:layout_toRightOf="@id/apply"
    />
</RelativeLayout>

2つのビューの垂直の場合:

<RelativeLayout
  Android:layout_width="fill_parent"
  Android:layout_height="fill_parent"
  Android:gravity="center"
  Android:background="@Android:color/black"
  >
  <Button
    Android:id="@+id/apply"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerInParent="true"
    Android:text="APPLY"
    Android:textSize="20sp"
    />
  <Button
    Android:id="@+id/undo"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_centerInParent="true"
    Android:text="UNDO"
    Android:textSize="20sp"
    Android:layout_below="@id/apply"
    />
</RelativeLayout>
9
mindriot

複数のレイアウトを一緒にネストする必要があります。何かをRelativeLayoutの中央に配置するには、子でAndroid:layout_centerInParent="true"を使用します。複数の子供を中央に配置しようとすると、それらはお互いの下/上になります。

したがって、たとえば、RelativeLayoutの子として2つのビューを持つLinearLayoutを使用でき、LinearLayoutにはAndroid:orientation="horizontal"Android:layout_centerInParent="true"があります。これで、LinearLayoutはRelativeLayoutの中央に配置され、2つの子が隣り合っているはずです。

6
Joakim Berglund

2つのビューをLinearLayoutでラップしてから、単一のTextViewの場合と同様に、LinearLayoutをRelativeLayoutの中央に配置します。

2
Barak

したがって、この問題に対する私の修正は、textviewの複合描画可能機能を活用することだけであることがわかりました。ボタンをゴミ箱に移動し、drawableRightを使用して検索アイコンを表示しました。

1
Frank Sposaro