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

ab1*_*b11 145 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);
Run Code Online (Sandbox Code Playgroud)

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

MarginLayoutParams params = new MarginLayoutParams(linearLayout.getLayoutParams());
linearLayout.setMargins(0, 10, 0, 10);
linearLayout.addView(view, params);
Run Code Online (Sandbox Code Playgroud)

谢谢.

riw*_*nyk 170

API> = 11的解决方案:

您可以将填充集成到分隔符中.如果您使用none,只需创建一个高空的drawable并将其设置为LinearLayout分隔符:

    <LinearLayout
            android:showDividers="middle"
            android:divider="@drawable/empty_tall_divider"
...>...</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

  • 如果你把形状做成方形,你可以在垂直和水平的LinearLayouts中使用它,而不需要创建一个有宽度的新的. (5认同)
  • 这是一篇关于它的出色博客文章:[Cyril Mottier在Android上的网格间距](http://cyrilmottier.com/2014/11/17/grid-spacing-on-android/) (2认同)
  • 如果您有一组视图并将其中的一些变成“GONE”,这会好得多。通过指定`android:showDividers="middle"`,你只会得到你真正需要的空间。 (2认同)

Tho*_*mas 119

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

  • 尝试使用LayoutParams而不是MarginLayoutParams. (2认同)

wor*_*ked 32

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

  • 显然,Android-Fairy听取了你的意见并在API 14中创建了一个"空间"视图:)(http://developer.android.com/reference/android/widget/Space.html) (12认同)
  • 但是你需要在每个视图的空间处,这与为所有视图声明间隙不同. (6认同)
  • 这不是一个答案。 (2认同)

Gor*_*rky 24

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

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(140, 398);
        layoutParams.setMargins(24, 0, 24, 0);
        layout.addView(button,layoutParams);
Run Code Online (Sandbox Code Playgroud)


小智 7

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

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

      // your item

  </LinearLayout>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)


teh*_*nsi 5

从API级别14开始,您可以仅添加一个(透明的)分隔器drawable:

android:divider="@drawable/divider"
android:showDividers="middle"
Run Code Online (Sandbox Code Playgroud)

它将为您处理其余的一切!

  • @leorleor 你是对的。最好的方法可能是使用透明的分隔线可绘制。我相应地更新了我的答案。 (2认同)

小智 5

添加视图后尝试添加Space小部件,如下所示:

layout.addView(view)
val space = Space(context)
space.minimumHeight = spaceInterval
layout.addView(space)
Run Code Online (Sandbox Code Playgroud)