Ответ 1
Вы должны android:layout_margin<Side>
для детей. Прокладка внутренняя.
Я программно добавляю пользовательские виды в вертикальный 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);
Вы должны android:layout_margin<Side>
для детей. Прокладка внутренняя.
Решение 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>
Android теперь поддерживает добавление вида Space между представлениями. Он доступен начиная с 4.0 ICS.
Пример ниже просто делает то, что вам нужно программно. Я использовал фиксированный размер (140 398).
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(140, 398);
layoutParams.setMargins(24, 0, 24, 0);
layout.addView(button,layoutParams);
Начиная с уровня API 14, вы можете просто добавить (прозрачный) разделитель:
android:divider="@drawable/divider"
android:showDividers="middle"
и он будет обрабатывать остальное для вас!
Используйте LinearLayout.LayoutParams
вместо MarginLayoutParams
. Вот документация.
Если вы используете 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>
Использование прокладки в макете 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>
Вы можете получить LayoutParams
родительского LinearLayout
и применить к отдельным представлениям следующим образом:
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
lp.setMargins(8,8,8,8);
Простой способ сделать это динамически - это добавить отступы для детей. Вы можете просто установить его, используя .setPadding() для объекта, который будет добавлен. Этот пример добавляет ImageView к LinearLayout:
LinearLayout userFeedLinearLayout = (LinearLayout) findViewById(R.id.userFeedLinearLayout);
imageView.setImageBitmap(bitmap);
imageView.setPadding(0, 30, 0, 30);
userFeedLinearLayout.addView(imageView);
Следующее изображение показывает два ImageViews, которые были добавлены с отступом:
Попробуйте добавить виджет Space после добавления вида следующим образом:
layout.addView(view)
val space = Space(context)
space.minimumHeight = spaceInterval
layout.addView(space)
Если ваш макет содержит метки o какой-то контейнер для текста. Вы можете добавить в конце каждого текста "\n", чтобы разбить строку и сделать пробел между элементами.
Пример:
video?.text="Video NR1: ${obj.Titulo} \n"