防止视图被推离屏幕

时间:2018-01-04 20:46:20

标签: android android-layout

我试图在另一个LinearLayout中水平排列3个LinearLayouts(基本上形成三列),其中中间布局的宽度可以根据它的内容而变化。

所有列都应始终可见,从左侧填充视口。左侧和右侧列将分配最大宽度。所以只有中间布局的大小不同。如果所有列的总宽度超出视口大小,则中间列不得重叠或推出其他列。但相反它应该使用剩余的空间。

我尝试使用布局权重,但这会使右列总是在右侧,而中间列会填满所有空间,即使它的内容不需要。

当我尝试将RelativeLayout用作容器时,我最终会将所有三列相互重叠或第一列消失。

我认为下面的代码(现在只有原理图,因为我无法访问代码atm)应该可以工作,但如上所述,第一个LinearLayout没有出现。最后的LinearLayout似乎已根据需要就位。

<RelativeLayout>
  <LinearLayout
  android:layout_alignParentStart>
  </LinearLayout>
  <LinearLayout>
  </LinearLayout>
  <LinearLayout
  android:layout_alignParentEnd>
  </LinearLayout>
</RelativeLayout>

有谁知道如何解决这个问题?如果您需要更详细的代码示例等,请告诉我。我会尽快提供。

我发现了一些关于这个或类似主题的其他问题,但解决方案总是使用布局权重或类似上面的代码片段。到目前为止,我对这些方法没有好运,也许是因为这些问题的用例略有不同或几年之后,因此api在平均时间内发生了变化。

非常感谢任何指针: - )

2 个答案:

答案 0 :(得分:0)

是。您希望使用layout_width="0dp"layout_weight="1"定义中心列。左列和右列将为layout_width="wrap_content"

LinearLayout应包含3个内部“列”LinearLayout s。

答案 1 :(得分:0)

我终于找到了一个有效的解决方案。

仅使用Jeffrey Blattman所描述的layout_weight只有在视图变得足够大以填满屏幕时才会起作用。

但是只要视图只填充一部分,你就会在它们之间产生间隙,因为中间视图会填满剩下的空间。在这种情况下,我想避免这种情况。

由于某些其他原因,我不得不将我的布局放入片段中。现在,当我将片段的尺寸设置为wrap_content时,行为完全符合我的要求。所以这些视图在它们很小的时候不会被炸毁,但它们的布局就好像没有定义layout_weight一样。但是当增大时,边缘视图仍然在屏幕内。