21

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

LinearLayout是一个很方便的layout manager。但我完全想念的是在单个 XML 标记中的元素(如填充)之间添加一定空间的可能性。

我所说的一个标签的意思是,我可以在 LinearLayout 的声明中定义元素之间的间距(例如,在垂直 LinearLayout 中,此布局中两个元素之间的垂直间距)。

我知道我可以通过添加 XML 标记android:layout_marginTop或类似于 LinearLayout 中的每个元素的东西来做到这一点。

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

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

4

5 回答 5

19

推荐的方式是将样式应用于线性布局中的所有元素

android:style="@style/mystyle"

<style name="mystyle">
      <item name="android:layout_marginTop">10dp</item>
      ... other things that your elements have in common
</style>
于 2012-09-18T00:07:16.357 回答
15

将自定义透明可绘制对象设置为布局的分隔线:

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

可绘制文件夹(divider.xml)中的新可绘制资源:

<?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>
于 2017-07-26T13:17:31.990 回答
1

@Chris-Tulip 的回答真的帮助了我——也有很好的实践。

对于那些可能会遇到 Eclipse 错误的人,因为在包 android 中缺少“样式”的资源标识符,就像我一样,你不需要添加 android 命名空间。

所以, android:style="xx" 提出了错误,而 style="xx" 是正确的。时髦,但对于任何有这个错误的人来说,这可能会有所帮助。

于 2014-06-10T03:48:22.683 回答
0

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

然后,您将在实际项目上定义间距,而不是在父 LinearLayout 上定义间距(android:layout_marginTop例如),并且当您膨胀它们时,该间距将应用于您的所有项目。

编辑:

容器.xml:

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

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

</LinearLayout>

项目.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>

我的活动.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);

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

于 2012-09-17T07:49:19.307 回答
0

您应该向必须缩进的元素添加android:layout_marginTop或。android:layout_marginLeft取决于android:orientation你的LinearLayout.

于 2015-03-23T09:05:15.720 回答