在Android中,如何在LinearLayout孩子之间腾出空间?

时间:2010-11-23 18:32:12

标签: android

我正在以编程方式将自定义视图添加到垂直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);

*编辑。我还尝试使用MarginLayoutParams作为参数,同时将视图添加到线性布局(如下所示)。这也行不通:

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

谢谢。

13 个答案:

答案 0 :(得分:160)

API> = 11 解决方案:

您可以将填充集成到分隔符中。如果您使用none,只需创建一个高空的drawable并将其设置为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>

答案 1 :(得分:105)

你应该对孩子们android:layout_margin<Side>。填充是内部的。

答案 2 :(得分:30)

Android现在支持在视图之间添加Space视图。它可以从4.0 ICS开始提供。

答案 3 :(得分:22)

下面的示例只是以编程方式执行您需要的操作。我使用了固定大小(140,398)。

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

答案 4 :(得分:4)

使用LinearLayout.LayoutParams代替MarginLayoutParamsHere's文档。

答案 5 :(得分:4)

从API Level 14开始,您只需添加(透明)分隔符drawable:

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

它会为你处理剩下的事情!

答案 6 :(得分:3)

如果您使用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>

答案 7 :(得分:1)

在子视图的布局中使用填充。

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>

答案 8 :(得分:1)

您可以获得父LayoutParams的{​​{1}}并以这种方式申请个人观看次数:

LinearLayout
  • 请注意setMargins()将像素视为int数据类型。因此,在添加值之前转换为dp
  • 上面的代码将高度和宽度设置为wrap_content。你可以自定义它。

答案 9 :(得分:1)

您只需要使用线性布局包装具有 layout_weight 的项目。要水平分隔项目,请使用此

<LinearLayout
    ...
    ...
  <LinearLayout
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:gravity="center">

      // your item

  </LinearLayout>
</LinearLayout>

答案 10 :(得分:0)

尝试在添加如下视图之后添加 Space 小部件:

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

答案 11 :(得分:0)

如果布局包含标签或文本的某个容器。您可以在每个文本的末尾添加“ \ n” 来分隔行并在元素之间留出空格。
示例:

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

答案 12 :(得分:0)

动态执行此操作的一种简单方法是为孩子添加填充。您可以使用.setPadding()在要添加的对象上进行设置。此示例将ImageView添加到LinearLayout:

<table>
<th>rank</th>
<th>Protocol</th>
<th>Type</th>

<tr>
<td>1</td>
<td>https</td>
<td>regular</td>
</tr>



<tr>
<td>2</td>
<td>https</td>
<td>amp</td>

<tr>
<td>2</td>
<td>https</td>
<td>regular</td>

</tr>
</table>

下图显示了已使用填充添加的两个ImageView:

Padding On Children