我想在高度相等的屏幕上设置两个0.171 <= par[1] <= 0.204
,以平均覆盖屏幕,问题是,如果我使用高度,因为RecyclerView
的视图不能平均展开,并且如果我固定它们的高度或给它们wrap_content
,如果其中一个列表为空,则会出现空格。
如果这些列表中的一个为空,并且两个列表中都有数据,那么我希望这些列表不占用空间,那么它们将在屏幕上覆盖相等的空间。
答案 0 :(得分:3)
您不能仅在XML中执行此操作。您将需要一些Java。您的布局权重在正确的轨道上。
骨架XML:
<LinearLayout
android:orientation="vertical">
<RecyclerView
android:id="@+id/recView1"
android:layout_height="0dp"
android:layout_weight="1"
/>
<RecyclerView
android:id="@+id/recView2"
android:layout_height="0dp"
android:layout_weight="1"
/>
</LinearLayout>
下一部分需要用Java完成。
将数据观察器添加到两个适配器,并确保覆盖所有方法并使它们调用onChanged()
。然后,在onChanged()
内,检索当前适配器的计数并适当设置RecyclerView的可见性。
这是第一个例子:
recView1.getAdapter().registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
recView1.setVisibility(recView1.getAdapter().getItemCount() > 0 ? View.VISIBLE : View.GONE);
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
onChanged();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
onChanged();
}
}
实际上,您可能应该将两个观察者都提取到变量中,以便在包含的Activity / Window /任何对象被破坏时可以注销它们。
答案 1 :(得分:0)
使用以下代码 希望它能工作
int x=this. getResources().getDisplayMetrics().heightPixels*1/2;
recyclerview1.setLayoutParams(new LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, x));
recyclerview2.setLayoutParams(new LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams.WRAP_CONTENT, x));