在相对视图内以编程方式布局布局

时间:2015-11-06 13:51:11

标签: android android-recyclerview android-relativelayout

当一个视图低于另一个视图时,我正在尝试以编程方式将两个视图添加为根RelativeLayout的子视图。

这是根视图(也位于另一个CoordinatorLayout中,但我认为它不相关):

<RelativeLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

现在,这是我尝试以编程方式添加的两种布局之一:

<android.support.v7.widget.RecyclerView    
    android:id="@+id/recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

和另一个:

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

    <ImageView
        android:id="@+id/icon"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_alignParentLeft="true"
        android:background="@drawable/ic_group_members"/>

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/icon"
        android:layout_centerVertical="true"
        android:layout_marginLeft="15dp"
        android:layout_toRightOf="@+id/icon"
        android:textSize="18sp"
        android:textStyle="bold"
        android:text="@string/members_title"/>

</RelativeLayout>

我在此代码中添加了此内容:

RelativeLayout container = (RelativeLayout)findViewById(R.id.container);
container.addView(topView);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lp.addRule(RelativeLayout.BELOW, bottomView.getId());
bottomView.setLayoutParams(lp);
container.addView(bottomView);

结果是:底部视图不可见。

我尝试了什么:

  1. 将第一个RecyclerView的高度更改为WRAP_CONTENT(认为它可能会填满所有空格并隐藏底部布局),这些效果无效。
  2. 而不是将LayoutParams设置为底视图,而不是:

    container.addView(bottomView, lp);
    
  3. 但它也没有用。

    1. 使用LinearLayout代替RelativeLayout容器,也可以使用相同的行为。
    2. 我没有更多的想法会导致这个问题,通过查看类似的问题,没有任何效果。我有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您的第一个视图是RecyclerView,它是一个可滚动的视图。如果将高度wrap_content设置为RecyclerView / ListView,则无关紧要。在所有情况下,除非您为RecyclerView设置特定高度,否则它将填满整个屏幕,明显小于设备的高度。然后,RecyclerView下面的第二个视图会显示出来。以下是您可以尝试的内容:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, HEIGHT_OF_VIEW);
recyclerView.setLayoutParams(params);

答案 1 :(得分:0)

LinearLayout方法应该有效。

请注意:
1)Container LinearLayout应该有layout_height MATCH_PARENT
2)RecyclerView的layout_height为0,layout_weight为1

如果您希望保持RelativeLayout方法,请尝试:
1)BottomLayout,规则为RelativeLayout.ALIGN_PARENT_BOTTOM
2)使用规则RelativeLayout.ABOVE

的RecyclerView

示例第二种方法:

RelativeLayout containerLayout = (RelativeLayout) findViewById(R.id.container);

RelativeLayout bottomLayout = new RelativeLayout(this);
bottomLayout.setId(R.id.bottom_id);
RelativeLayout.LayoutParams bottomLayoutParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            bottomLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
bottomLayout.setLayoutParams(bottomLayoutParams);
bottomLayout.setBackgroundColor(Color.RED);
TextView bottomTextView = new TextView(this);
bottomTextView.setText("Bottom Layout");
bottomLayout.addView(bottomTextView);
containerLayout.addView(bottomLayout);

RecyclerView recyclerView = new RecyclerView(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.ABOVE, R.id.bottom_id);
recyclerView.setLayoutParams(params);
recyclerView.setBackgroundColor(Color.BLUE);
containerLayout.addView(recyclerView);