Подтвердить что ты не робот

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

Я программно добавляю пользовательские виды в вертикальный LinearLayout, и я хотел бы, чтобы между видами было некоторое пространство. Я попытался добавить: setPadding (0, 1, 0, 1) в мой конструктор CustomView, но это, похоже, не имеет никакого эффекта. Любой совет?

* Было указано, что я должен использовать поля. Так как я динамически добавляю представления, мне нужно установить поля из кода (не в xml). Я считаю, что способ сделать это ниже, но он не работает.

public class MyView extends View
{
    public MyView (Context context)
    {
        super(context);

        MarginLayoutParams params = new MarginLayoutParams(LayoutParams.WRAP_CONTENT,  LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 10, 0, 10);
        setLayoutParams(params);

* Edit. Я также попытался использовать MarginLayoutParams в качестве параметра при добавлении представлений в линейный макет (как показано ниже). Это также не сработало:

MarginLayoutParams params = new MarginLayoutParams(linearLayout.getLayoutParams());
linearLayout.setMargins(0, 10, 0, 10);
linearLayout.addView(view, params);
4b9b3361

Ответ 1

Вы должны android:layout_margin<Side> для детей. Прокладка внутренняя.

Ответ 2

Решение API >= 11:

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

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

empty_tall_divider.xml:

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <size
            android:height="40dp"
            android:width="0dp"/>
</shape>

Ответ 3

Android теперь поддерживает добавление вида Space между представлениями. Он доступен начиная с 4.0 ICS.

Ответ 4

Пример ниже просто делает то, что вам нужно программно. Я использовал фиксированный размер (140 398).

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(140, 398);
        layoutParams.setMargins(24, 0, 24, 0);
        layout.addView(button,layoutParams);

Ответ 5

Начиная с уровня API 14, вы можете просто добавить (прозрачный) разделитель:

android:divider="@drawable/divider"
android:showDividers="middle"

и он будет обрабатывать остальное для вас!

Ответ 6

Используйте LinearLayout.LayoutParams вместо MarginLayoutParams. Вот документация.

Ответ 7

Если вы используете ActionBarSherlock, вы можете использовать com.actionbarsherlock.internal.widget.IcsLinearLayout:

<com.actionbarsherlock.internal.widget.IcsLinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:divider="@drawable/list_view_divider"
        android:dividerPadding="2dp"
        android:showDividers="middle" >
...
</com.actionbarsherlock.internal.widget.IcsLinearLayout>

Ответ 8

Использование прокладки в макете Child View.

layout.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_margin="5dp"
          android:background="@drawable/backage_text"
          android:textColor="#999999"
           >

</TextView>

backage_text.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">

    <solid android:color="@color/white"/>
    <corners android:radius="2dp"/>
    <stroke
        android:width="1dp"
        android:color="#999999"/>
    <padding
        android:bottom="5dp"
        android:left="10dp"
        android:right="10dp"
        android:top="5dp" />
</shape>

Ответ 9

Вы можете получить LayoutParams родительского LinearLayout и применить к отдельным представлениям следующим образом:

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(8,8,8,8);
  • Позаботьтесь о том, чтобы setMargins() воспринимал пиксели как тип данных int.So, конвертировать в dp перед добавлением значений
  • Над кодом будет устанавливаться высота и ширина в wrap_content. вы можете настроить его.

Ответ 10

Простой способ сделать это динамически - это добавить отступы для детей. Вы можете просто установить его, используя .setPadding() для объекта, который будет добавлен. Этот пример добавляет ImageView к LinearLayout:

LinearLayout userFeedLinearLayout = (LinearLayout) findViewById(R.id.userFeedLinearLayout);
imageView.setImageBitmap(bitmap);
imageView.setPadding(0, 30, 0, 30);
userFeedLinearLayout.addView(imageView);

Следующее изображение показывает два ImageViews, которые были добавлены с отступом:

Padding On Children

Ответ 11

Попробуйте добавить виджет Space после добавления вида следующим образом:

layout.addView(view)
val space = Space(context)
space.minimumHeight = spaceInterval
layout.addView(space)

Ответ 12

Если ваш макет содержит метки o какой-то контейнер для текста. Вы можете добавить в конце каждого текста "\n", чтобы разбить строку и сделать пробел между элементами.
Пример:

video?.text="Video NR1: ${obj.Titulo} \n"