Как указать интервал между элементами LinearLayout только один раз?

недавно я снова столкнулся с проблемой, которая у меня уже была несколько раз за последние годы.

LinearLayout очень удобно layout manager. Но я полностью упускаю возможность добавить определенное пространство между элементами (например, заполнение) в один XML-тег.

что я имею в виду под одним тегом, это то, что я могу определить в объявлении LinearLayout расстояние между элементами (например, в вертикальном LinearLayout вертикальное пространство между двумя элементами в этом макет.)

Я знаю, что могу сделать это, добавив XML-тег android:layout_marginTop или что-то подобное каждому элементу в LinearLayout.

но я хотел бы иметь возможность определить его только в одной точке, так как интервал одинаков для всех элементов.

кто-нибудь знает простой способ сделать это (не реализуя пользовательский LinearLayout или что-то в этом роде)? Я предпочитаю решение, которое работает непосредственно в XML без необходимости кодирования.

5 ответов


рекомендуется применять стиль ко всем элементам линейной компоновки

android:style="@style/mystyle"

<style name="mystyle">
      <item name="android:layout_marginTop">10dp</item>
      ... other things that your elements have in common
</style>

установите пользовательский прозрачный drawable в качестве разделителя для вашего макета:

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

новый drawable ресурс в папке drawables (делитель.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-ответ тюльпана действительно помог мне-с хорошей практикой тоже.

для тех из вас, кто может получить ошибку Eclipse об отсутствии идентификатора ресурса для "стиля" в пакете android, как и я, вам не нужно добавлять пространство имен android.

Так, android: style= "xx"вызывает ошибку, в то время как style=" xx " является правильным. Фанки, но для тех, у кого есть эта ошибка, это может помочь.


вы должны добавить android:layout_marginTop или android:layout_marginLeft для элемент, который должен иметь отступ. Зависит от android:orientation вашего LinearLayout.


вы можете определить свой единственный элемент "прототип" в отдельном xml-файле, а затем раздуть элементы из этого файла динамически в коде и вставить их в линейный макет.

затем вы определяете интервал между фактическим элементом, а не родительским LinearLayout (как android:layout_marginTop например), и этот интервал будет применяться ко всем вашим элементам при раздувании их.

EDIT:

контейнер.XML-код:

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

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

</LinearLayout>

товар.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);

Я не приложил усилий для тестирования кода, но он" должен " работать так, как есть: -)