web-dev-qa-db-ja.com

AndroidカスタムListViewのRelativeLayoutのレイアウトの中央揃え

私は本当にこれの上に髪を引っ張っています。いくつかの背景。すべてのアイテムの横にチェックボックスがあるアイテムのリストがあります。チェックボックスの選択を解除すると、リストからアイテムを削除するためのボタンが表示されます。これは最初は逆に思えますが、「選択された」アイテムのみをさらに処理するなどの対象にしたいのです。これが私のレイアウトです。

<RelativeLayout Android:id="@+id/rlBlahBlah" 
                Android:layout_width="fill_parent" 
                Android:layout_height="wrap_content"
                Android:minHeight="?android:attr/listPreferredItemHeight"
                xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <CheckBox Android:text="" 
            Android:id="@+id/cbDeleteItem" 
            Android:layout_width="wrap_content" 
            Android:layout_height="wrap_content"
            Android:layout_gravity="center_vertical"
            Android:focusable="false"
            />
  <TextView Android:text="" 
            Android:id="@+id/tvItemText" 
            Android:layout_width="wrap_content" 
            Android:layout_height="wrap_content" 
            Android:textSize="14dip"
            Android:paddingLeft="3dip"
            Android:paddingRight="3dip"
            Android:paddingTop="13dip"
            Android:gravity="fill_vertical"
            Android:layout_toRightOf="@id/cbDeleteItem"
            />
  <Button Android:layout_height="wrap_content" 
          Android:id="@+id/btnDelete" 
          Android:text="Delete" 
          Android:layout_width="wrap_content"
          Android:layout_alignParentRight="true"
          Android:gravity="center_vertical"
          Android:focusable="false"
          />
</RelativeLayout>

命を救うために、3つのアイテムを縦に並べることができません。 layout_gravitygravitylayout_centerVertical、どれも機能しません。私の問題はどこかでひっくり返る小さな設定だと確信していますが、私は本当にこれで終わりです。

編集:私はtextviewが "fill_vertical"であることを知っています、それは私が試していたいくつかのランダムなものです。

15
MattC

あなたの問題はおそらくレイアウトによるものではなく、レイアウトをどのように膨らませているかによるものです。実際、あなたがあなたのテクニックをどこで学んだかによっては、それは私のせいかもしれません...

遍在するものを引用するには Romain Guy

アダプターでのinflate()の正しい使用法は次のとおりです。

inflate(layoutId、parent、false);

親(getView()のパラメーターとして指定)を渡すと、UIツールキットで適切なLayoutParamsオブジェクトを作成できます。 falseを渡すと、ツールキットはparent.addView(theInflateChild)を呼び出さないようになります。これは、ListViewが後で独自の魔法を実行するためです。

私が伝統的にアドバイスしたように、inflate(layoutId, null)を使用する場合、行の基本レイアウトとしてRelativeLayoutを使用し、垂直方向の中央揃えを使用しない限り、問題はありません。

今後数週間で新しいアドバイスを反映するために、本などを更新します。

24
CommonsWare

この属性は、Buttonを使用してRelativeLayoutを中央に配置するために機能しました。

Android:layout_centerInParent="true"

この投稿を参照してください: RelativeLayoutのボタンを中央に配置できますか?

59
John

私はRelativeLayoutを使用して、重力もlayout_gravityも運がありませんでした。

だが Android:layout_centerVertical="true"私のRelativeLayoutの子に配置された私のために働いたので、必要に応じてそれを保持できます。

16
Murphy

これが私が望んでいたことを正確に実行することになったレイアウトです。 layout_gravity属性を無視することを知ったら、RelativeLayoutを捨てました(もちろん、今は投稿が見つかりません)。いずれにせよ、ネストされたLinearLayoutsが私のためにトリックを行いました:

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:minHeight="?android:attr/listPreferredItemHeight"
    Android:id="@+id/llBlahBlahRowMain"
    Android:padding="6dip">
    <CheckBox Android:text="" 
              Android:id="@+id/cbDeleteItem" 
              Android:layout_width="wrap_content" 
              Android:layout_height="wrap_content"
              Android:layout_gravity="center_vertical"
              Android:focusable="false"
              />
    <LinearLayout
        Android:orientation="vertical"
        Android:layout_width="wrap_content"
        Android:layout_weight="1"
        Android:layout_gravity="center_vertical"
        Android:layout_height="wrap_content">
         <TextView 
            Android:text="blah blah dynamically replaced text" 
            Android:id="@+id/tvItemText" 
            Android:layout_width="wrap_content" 
            Android:layout_height="wrap_content" 
            Android:layout_weight="1"
            Android:textSize="14dip"
            Android:paddingLeft="3dip"
            Android:layout_gravity="center_vertical"
            />
    </LinearLayout>
    <Button Android:layout_width="wrap_content"
          Android:layout_height="wrap_content" 
          Android:id="@+id/btnDelete" 
          Android:text="Delete" 
          Android:layout_gravity="center_vertical" 
          Android:focusable="false"
          />
</LinearLayout>
2
MattC

私は私のために働いた別の解決策をしました。テキストボックス要素に、プロパティAndroid:layout_height = "fill_parent"を配置しました。このように、テキスト要素は親のすべての高さを埋めたので、コンテンツは正しく配置されました:)

<TextView Android:id="@+id/principal_li_descricao" 
    Android:layout_height="fill_parent"
    Android:layout_width="wrap_content"
    Android:layout_marginLeft="10dip" 
    Android:textColor="#ff000000" 
    Android:layout_centerVertical="true"
    Android:gravity="center_vertical"
    Android:layout_alignBottom="@+id/principal_li_icone"
    Android:layout_toRightOf="@+id/principal_li_icone"/>

ありがとう

1
Luiz Vianna

参照されているAndroid:gravity = "center_horizo​​ntal"を試しましたか ここ

1
Carnell