Как указать интервал между элементами 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);
Я не приложил усилий для тестирования кода, но он" должен " работать так, как есть: -)