布局高度问题与权重和wrap_content

时间:2016-07-13 19:15:29

标签: android android-layout

我的观点如下:

<LinearLayout 
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="match_parent">

<RecyclerView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
/>

<TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        />
</LinearLayout>

它会向TextView提供50dp,其余区域为RecyclerView。 但是如果RecyclerView中的项目小于1或2,那么它应缩小到它的子视图的高度,其他方面的行为就像布局指定的那样。任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我认为最好的选择是动态更改根视图的LinearLayout.LayoutParams。如果RecyclerView的孩子数量较少,请将LinearLayout参数设置为:

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
layout.setParams(params);

否则,保持原样。

很容易检测到RecyclerView是否应该被包裹。获取LinearLayout高度:

int height = layout.getTop() - layout.getBottom()

如果此高度低于预期的最大高度(屏幕高度或其他预定义值)。

答案 1 :(得分:0)

一种简单的方法是使用RelativeLayout:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_below="@+id/recyclerView" />

</RelativeLayout>