如何只指定一次LinearLayout元素之间的间距?

时间:2012-09-17 07:38:07

标签: android android-layout android-widget android-linearlayout

我最近又遇到了一个问题,那就是我在过去几年已经好几次了。

LinearLayout非常方便layout manager。但我完全错过的是在单个XML标记中添加元素之间的某个空间(如填充)的可能性。

我的意思是,我可以在LinearLayout的声明中定义元素之间的间距(例如,在垂直LinearLayout中,这个布局中两个元素之间的垂直空间)。

我知道我可以通过添加XML标记android:layout_marginTop或类似于LinearLayout中每个元素的内容来实现。

但我希望能够只在一个点上定义它,因为所有元素的间距都是相同的。

有没有人知道一个简单的方法(没有实现自定义LinearLayout或类似的东西)?我更喜欢直接在XML中工作而无需编码的解决方案。

5 个答案:

答案 0 :(得分:18)

建议的方法是将样式应用于线性布局中的所有元素

android:style="@style/mystyle"

<style name="mystyle">
      <item name="android:layout_marginTop">10dp</item>
      ... other things that your elements have in common
</style>

答案 1 :(得分:5)

将自定义透明drawable设置为布局的分隔符:

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

drawables文件夹(divider.xml)中的新drawable资源:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android = "http://schemas.android.com/apk/res/android">
  <size
    android:width = "0dp"
    android:height = "16dp"/>
</shape>

答案 2 :(得分:1)

@ Chris-Tulip的答案对我很有帮助 - 也有良好的做法。

对于那些可能会收到关于错过&#34; Style&#34;的资源标识符的Eclipse错误的人。在包android中,就像我一样,你不需要添加android命名空间。

所以, 机器人:式=&#34; XX&#34;提出错误,而style =&#34; xx&#34;是正确的。时髦,但对于任何有错误的人来说,这可能会有所帮助。

答案 3 :(得分:0)

您可以在单独的xml文件中定义单个项目“prototype”,然后在代码中动态扩充该文件中的项目,并将它们插入到线性布局中。

然后,您可以在实际项目上定义间距,而不是父线性阵列(例如,android:layout_marginTop),并且当您向它们充气时,该间距将应用于您的所有项目。

<强> 编辑:

container.xml中:

<LinearLayout
    android:id="@+id/parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Your items will be added here -->

</LinearLayout>

item.xml:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="4dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="This is my child" />

</LinearLayout>

MyActivity.java:

// Put this in a suitable place in your Java code, perhaps
// in "onCreate" or "onResume" depending on where and how
// you initialize your view. You can, of course inflate
// any number of instances of the item and add them to
// your parent LinearLayout.
LayoutInflater inflater = LayoutInflater.from(context);
View item = inflater.inflate(R.layout.item, null, false);

LinearLayout container = findViewById(R.id.parent);
container.addView(view);

我没有努力测试代码,但它“应该”按原样工作: - )

答案 4 :(得分:0)

您应该将android:layout_marginTopandroid:layout_marginLeft添加到必须缩进的元素中。取决于android:orientation的{​​{1}}。