web-dev-qa-db-ja.com

LinearLayoutの要素間の間隔を一度だけ指定するにはどうすればよいですか?

私は最近、ここ数年ですでに何度かあった問題に再び遭遇しました。

LinearLayoutは非常に便利なlayout managerです。しかし、私が完全に見逃しているのは、単一のXMLタグの要素(パディングなど)の間に特定のスペースを追加する可能性です。

1つのタグが意味することは、LinearLayoutの宣言で要素間の間隔を定義できることです(たとえば、LinearLayoutの垂直レイアウトでは、このレイアウトの2つの要素間の垂直スペース)。

XMLタグAndroid:layout_marginTopまたはLinearLayoutのすべての要素に類似した何かを追加することでそれができることを知っています。

しかし、間隔はすべての要素で同じであるため、1つのポイントでのみ定義できるようにしたいと思います。

誰かがこれを行う簡単な方法を知っていますか(カスタムのLinearLayoutなどを実装していません)?私は、コーディングを必要とせずにXMLで直接機能するソリューションを好みます。

18
Dude

推奨される方法は、線形レイアウトのすべての要素にスタイルを適用することです

Android:style="@style/mystyle"

<style name="mystyle">
      <item name="Android:layout_marginTop">10dp</item>
      ... other things that your elements have in common
</style>
18
chris-tulip

カスタムの透明なドロアブルをレイアウトの仕切りとして設定します。

<LinearLayout
  Android:showDividers="middle"
  Android:divider="@drawable/divider">

Drawablesフォルダー(divider.xml)の新しい描画可能リソース:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android = "http://schemas.Android.com/apk/res/Android">
  <size
    Android:width = "0dp"
    Android:height = "16dp"/>
</shape>
5
Zon

@ Chris-Tulipの答えは本当に助けになりました。

私が行ったように、パッケージAndroidの「スタイル」のリソース識別子が見つからないというEclipseエラーが発生する可能性がある場合は、Android名前空間を追加する必要はありません。

したがって、Android:style = "xx"はエラーを表示しますが、style = "xx"は正しいです。ファンキーですが、そのエラーを抱えている人にとっては、これが役立つかもしれません。

1
Watercayman

インデントが必要な要素にAndroid:layout_marginTopまたはAndroid:layout_marginLeftを追加する必要があります。 LinearLayoutAndroid:orientationに依存します。

0
Yura

単一のアイテム「プロトタイプ」を別のxmlファイルで定義し、そのファイルからアイテムをコード内で動的に膨らませて、線形レイアウトに挿入することができます。

次に、親LinearLayoutではなく、実際のアイテムの間隔を定義します(Android:layout_marginTop例)その間隔は、膨張するときにすべてのアイテムに適用されます。

EDIT:

container.xml:

<LinearLayout
    Android:id="@+id/parent"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <!-- Your items will be added here -->

</LinearLayout>

item.xml:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_marginTop="4dp">

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:text="This is my child" />

</LinearLayout>

MyActivity.Java:

// Put this in a suitable place in your Java code, perhaps
// in "onCreate" or "onResume" depending on where and how
// you initialize your view. You can, of course inflate
// any number of instances of the item and add them to
// your parent LinearLayout.
LayoutInflater inflater = LayoutInflater.from(context);
View item = inflater.inflate(R.layout.item, null, false);

LinearLayout container = findViewById(R.id.parent);
container.addView(view);

私はコードのテストに力を入れていませんが、それは「そのまま」動作するはずです:-)

0
dbm