当一个视图低于另一个视图时,我正在尝试以编程方式将两个视图添加为根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);
结果是:底部视图不可见。
我尝试了什么:
RecyclerView
的高度更改为WRAP_CONTENT
(认为它可能会填满所有空格并隐藏底部布局),这些效果无效。 而不是将LayoutParams
设置为底视图,而不是:
container.addView(bottomView, lp);
但它也没有用。
LinearLayout
代替RelativeLayout
容器,也可以使用相同的行为。 我没有更多的想法会导致这个问题,通过查看类似的问题,没有任何效果。我有什么想法吗?
答案 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
示例第二种方法:
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);