在Android中,如何在LinearLayout子元素之间创build空间?

我正在编程添加自定义视图到一个垂直的LinearLayout,我希望有一些空间之间的意见。 我曾尝试添加:setPadding(0,1,0,1)到我的CustomView构造函数,但这似乎没有任何效果。 有什么build议?

*有人指出,我应该使用利润。 由于我dynamic添加视图,我需要从代码(而不是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); 

谢谢。

您应该在子android:layout_margin<Side>上使用android:layout_margin<Side> 。 填充是内部的。

API> = 11解决scheme:

您可以将填充整合到分隔符中。 如果你没有使用,只需创build一个高空的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> 

Android现在支持在视图之间添加空间视图。 它从4.0 ICS起可用。

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

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

使用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> 

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

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> 

你可以得到父LinearLayoutLayoutParams ,并以这种方式应用于各个视图:

 LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); lp.setMargins(8,8,8,8); 
  • 请注意,setMargins()将像素作为int数据types。因此,在添加值之前将其转换为dp
  • 上面的代码将高度和宽度设置为wrap_content。 你可以自定义它。

由于API级别14,你可以添加一个(透明的)分隔符drawable:

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

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