私は最近、ここ数年ですでに何度かあった問題に再び遭遇しました。
LinearLayout
は非常に便利なlayout manager
です。しかし、私が完全に見逃しているのは、単一のXMLタグの要素(パディングなど)の間に特定のスペースを追加する可能性です。
1つのタグが意味することは、LinearLayoutの宣言で要素間の間隔を定義できることです(たとえば、LinearLayoutの垂直レイアウトでは、このレイアウトの2つの要素間の垂直スペース)。
XMLタグAndroid:layout_marginTop
またはLinearLayoutのすべての要素に類似した何かを追加することでそれができることを知っています。
しかし、間隔はすべての要素で同じであるため、1つのポイントでのみ定義できるようにしたいと思います。
誰かがこれを行う簡単な方法を知っていますか(カスタムのLinearLayoutなどを実装していません)?私は、コーディングを必要とせずにXMLで直接機能するソリューションを好みます。
推奨される方法は、線形レイアウトのすべての要素にスタイルを適用することです
Android:style="@style/mystyle"
<style name="mystyle">
<item name="Android:layout_marginTop">10dp</item>
... other things that your elements have in common
</style>
カスタムの透明なドロアブルをレイアウトの仕切りとして設定します。
<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>
@ Chris-Tulipの答えは本当に助けになりました。
私が行ったように、パッケージAndroidの「スタイル」のリソース識別子が見つからないというEclipseエラーが発生する可能性がある場合は、Android名前空間を追加する必要はありません。
したがって、Android:style = "xx"はエラーを表示しますが、style = "xx"は正しいです。ファンキーですが、そのエラーを抱えている人にとっては、これが役立つかもしれません。
インデントが必要な要素にAndroid:layout_marginTop
またはAndroid:layout_marginLeft
を追加する必要があります。 LinearLayout
のAndroid:orientation
に依存します。
単一のアイテム「プロトタイプ」を別の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);
私はコードのテストに力を入れていませんが、それは「そのまま」動作するはずです:-)