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

qacovj5a  于 2022-09-21  发布在  Android
关注(0)|答案(6)|浏览(163)

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

LinearLayout是一个非常方便的layout manager。但我完全忽略了在单个XML标记中的元素之间添加特定空格(如填充)的可能性。

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

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

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

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

nwlls2ji

nwlls2ji1#

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

android:style="@style/mystyle"

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

xqkwcwgp2#

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

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

Drawables文件夹(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>
ewm0tg9j

ewm0tg9j3#

@Chris-Tulip的回答对我真的很有帮助--也有很好的练习。

对于那些可能像我一样在Android包中缺少“style”的资源标识符的人来说,您不需要添加Android名称空间。

因此,android:style=“xx”会出现错误,而style=“xx”是正确的。很时髦,但对于任何有这种错误的人来说,这可能会有所帮助。

krcsximq

krcsximq4#

您应该将android:layout_marginTopandroid:layout_marginLeft添加到必须具有缩进的元素。取决于LinearLayoutandroid:orientation

iqjalb3h

iqjalb3h5#

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

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

  • 编辑:*

  • tainer.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);

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

5hcedyr0

5hcedyr06#

对于垂直空间

<View
    android:layout_width="0dp"
    android:layout_height="20dp"/>

对于水平空间

<View
    android:layout_width="20dp"
    android:layout_height="0dp"/>

相关问题