【问题标题】:What is the connection between setVisibility and layout_weight in Linear Layout线性布局中setVisibility和layout_weight有什么联系
【发布时间】:2019-04-03 07:33:13
【问题描述】:

我有一个LinearLayout,里面有三个孩子,两个RecyclerViews 和一个ImageView。在基于某些条件的代码中,我使用setVisibility() 启用和禁用这些孩子。

public void onNotificationPriorityMixChanged(int mix) {
    Log.d(TAG, "onNotificationPriorityMixChanged() called with: mix = [" + mix + "]");
    switch (mix) {
        case MIX_BOTTOM_ONLY: {
            topListView.setVisibility(GONE);
            bottomListView.setVisibility(VISIBLE);
            spacer.setVisibility(GONE);
        }
        break;
        case MIX_TOP_ONLY: {
            topListView.setVisibility(VISIBLE);
            bottomListView.setVisibility(GONE);
            spacer.setVisibility(GONE);
        }
        break;
        case MIX_NONE: {
            topListView.setVisibility(GONE);
            bottomListView.setVisibility(GONE);
            spacer.setVisibility(GONE);
        }
        break;
        case MIX_BOTH: {
            topListView.setVisibility(VISIBLE);
            bottomListView.setVisibility(VISIBLE);
            spacer.setVisibility(VISIBLE);
        }
        break;
        default:
    }
}

布局文件有一个LinearLayout,其中第一个RecyclerView (topListView) 后跟ImageView (spacer) 后跟一个RecyclerView (bottomListView)。

问题是当其他两个被禁用时,我不能只让一个子视图占据整个父视图。 我的问题是我应该在 XML 中还是动态地使用 layout_weight 属性。谁能告诉我使用setVisibility()layout_weight 属性之间有什么联系(如果有的话)?

【问题讨论】:

  • 添加你的xml代码
  • 尝试在您的 linearLayout 中删除重量总和。
  • @GauravChauhan XML 发布在下面的答案中
  • @AngelKoh 我没有在LinearLayout中使用weightSum

标签: java android xml android-studio


【解决方案1】:

RecyclerViewslayout_height 设置为0dp(对于垂直LinearLayout

我已经测试过这个工作正常

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="2"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_weight="1"
        android:visibility="visible"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="2dp" />

    <android.support.v7.widget.RecyclerView
        android:layout_weight="1"
        android:visibility="visible"
        android:layout_width="match_parent"
        android:layout_height="0dp"/>

</LinearLayout>

对于隐藏任何视图使用.setVisibility(View.GONE)

显示任何视图使用.setVisibility(View.VISIBLE)

【讨论】:

  • 它没有使用 layout_widthlayout_height 设置为 match_parent 这是我使用的:&lt;android.support.v7.widget.RecyclerView android:id="@+id/notifications_listview_top" android:layout_width="match_parent" android:layout_height="0dp" android:scrollbars="vertical" android:layout_weight="1" /&gt;
  • 我仍然不清楚setVisibilitylayout_height。当顶部两个视图设置为GONE 时,底部视图如何占据线性布局的上部空间,反之亦然,其中两个回收器视图具有相同的layout_weight
  • 因为布局是等分的,当布局只有一个部分时,它会占据所有空间。
猜你喜欢
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多