Как указать расстояние между элементами LinearLayout только один раз?
Недавно я снова столкнулся с проблемой, которую я уже имел несколько раз за последние годы.
LinearLayout
является очень удобным layout manager
. Но то, что я полностью пропустил, - это возможность добавить определенное пространство между элементами (например, дополнением) в одном теге XML.
Что я имею в виду под одним тегом, я могу определить в объявлении LinearLayout интервал между элементами (например, в вертикальном LinearLayout вертикальное пространство между двумя элементами в этом макете).
Я знаю, что могу сделать это, добавив XML-тег android:layout_marginTop
или что-то похожее на каждый элемент LinearLayout.
Но я хотел бы иметь возможность определить его только в одной точке, поскольку интервал одинаковый для всех элементов.
Кто-нибудь знает простой способ сделать это (не реализуя пользовательский LinearLayout или что-то в этом роде)? Я предпочитаю решение, которое работает непосредственно в XML без необходимости кодирования.
Ответы
Ответ 1
рекомендуемый способ - применить стиль ко всем элементам линейного макета
android:style="@style/mystyle"
<style name="mystyle">
<item name="android:layout_marginTop">10dp</item>
... other things that your elements have in common
</style>
Ответ 2
Задайте настраиваемый прозрачный чертеж как разделитель для вашего макета:
<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>
Ответ 3
@Ответ Криса-Тюльпа действительно помог мне - с хорошей практикой тоже.
Для тех из вас, кто может получить ошибку Eclipse об отсутствии идентификатора ресурса для "Style" в пакете android, как и я, вам не нужно добавлять пространство имен android.
Итак,
android: style = "xx" вызывает ошибку, а стиль = "xx" правильный. Funky, но для тех, у кого есть эта ошибка, это может помочь.
Ответ 4
Вы можете определить свой единственный элемент "prototype" в отдельном 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);
Я не прилагал усилий для тестирования кода, но он должен "работать" как есть: -)
Ответ 5
Вы должны добавить android:layout_marginTop
или android:layout_marginLeft
к элементу, который должен иметь отступ. Зависит от android:orientation
вашего LinearLayout
.