19

是否有可能在 Android 中让利润崩溃?假设我有一个LinearLayout并添加三个TextViews,每个都有一个android:layout_marginof 10dp。我得到以下结果:

实际结果

但是,我想得到这个结果:

预期结果

我知道我可以通过为不同的项目设置不同的顶部/底部边距来解决这个问题:

  • 将第一项的上边距和最后一项的下边距设置为 10dp,
  • 将剩余的顶部/底部边距设置为 5dp,

但这会使设计更加复杂(特别是如果 TextViews 是动态创建的)。有没有办法让边距表现得像 CSS 中的一样?(有关为什么这是有意义的解释,请参阅:CSS collapsing margins 的意义何在?

4

2 回答 2

16

我通常自己解决这个问题的方法是将视图(即您的 TextView)边距减半,并将与填充相同的数字添加到包含的 ViewGroup(即您的 LinearLayout)。这样,您最终将在所有项目周围均匀间隔。例如:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dip"
    >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dip"
        android:text="I'm a TextView!"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dip"
        android:text="I'm a TextView!"
        />
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dip"
        android:text="I'm a TextView!"
        />
</LinearLayout>
于 2012-07-31T18:54:39.793 回答
0

为将来可能需要此功能的人发布解决方案。适用于静态以及列表项是动态的AdapterView

父容器示例:

<RecyclerView
     ----
     android:padding_top="10dp"
     android:padding_start="10dp"
     android:padding_end="10dp"
     ---- 
>
</RecyclerView>

填充确保窗口顶部、左侧和右侧的间距。

现在唯一剩下的是两个连续孩子之间的垂直间隙和最后一个孩子之后的底部间隙。

示例子/项目视图:

<RelativeLayout
     ----
     android:margin_bottom="10dp"
     ----
>
     <DynamicChild1 />
     <DynamicChild2 />
</RelativeLayout>

具体来说,对于这个问题,子视图将只是一个TextView底部边距。

这将为您提供问题中预期的确切输出。

于 2022-01-22T16:34:10.460 回答