【问题标题】:How to hide some of the views of a CoordinatorLayout如何隐藏 CoordinatorLayout 的一些视图
【发布时间】:2021-09-17 06:01:02
【问题描述】:

我有一个包含很多视图的布局,假设层次结构是:

  • 协调器布局
    • 嵌套滚动视图
      • 约束布局
        • 约束布局
          • 一些观点
        • 查看(分隔符)
        • 约束布局
          • 一些观点
        • 查看(分隔符)
        • 等等……
    • AppBar 的包含
    • MyCustomProgressBar
  • 关闭 CoordinatorLayout

问题是我创建了一个 Group 和我想要隐藏的 id 的 constraint_referenced_ids(它们在层次结构树中,但是当我尝试隐藏它们并显示另一个时它们不是躲起来,我还能看到他们。

我的想法是,我希望这个布局像现在这样,但是添加一个 ProgressBar,例如,当它加载时,它只显示 ProgressBar

我做了一个 api 调用

进度条可见 我收到了来自 api 的回复 隐藏进度条 使可见组并填充里面的值

我尝试将它们添加到CoordinatorLayout 中,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/myRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    >

   <ConstraintLayout>...</ConstraintLayout>

    <include
        android:id="@+id/app_bar"
        layout="@layout/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

    <MyCustomProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:id="@+id/my_custom_progress_bar"/>

    <androidx.constraintlayout.widget.Group
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:constraint_referenced_ids="lot_of_ids"
        android:id="@+id/myGroup"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

但我无法让它工作,我错过了什么?

一般的想法是能够继续使用原来的大布局,但只需添加一些视图,例如 ProgressBarEmptyCustomView 以在不重叠信息的情况下显示它们,只显示确切的视图,我已经做过很多次了,但不是在CoordinatorLayout,比如用“状态”分隔它,当状态为 Loading 时,显示进度条,当状态为 Empty 时,显示 EmptyCustomView当状态为 Success 时,从一开始就显示布局,但隐藏其他布局。

【问题讨论】:

    标签: java android kotlin android-layout layout


    【解决方案1】:

    我不完全理解你的问题。但是,我推断您正在尝试隐藏某些视图,并且很容易以编程方式做到这一点。

    第 1 步:提供视图以在 XML 声明中隐藏 ID。假设它是一个 TextView。

    <TextView
        android:id="@+id/view_to_hide"
        .../>
    

    第 2 步:在 Java 文件中声明视图。

    TextView toHide = (TextView) findViewById(R.id.view_to_hide);
    

    第 3 步:无论您需要什么,都可以通过调用 setVisibility 方法来隐藏视图。

    toHide.setVisibility(View.VISIBLE); //for visible
    toHide.setVisibility(View.INVISIBLE); //for invisible
    

    还有View.GONE等其他值;但是,我发现 VISIBLEINVISIBLE 足以满足我的所有目的。

    还请注意,此方法实际上适用于扩展 View 类的任何内容(例如,甚至可以在 LinearLayouts 等上调用此方法)。在设置View.INVISIBLE 上,视图无法获得焦点且无法单击。我希望这个答案会有所帮助。

    【讨论】:

      【解决方案2】:

      看看 View.setVisibility(View.GONE / View.VISIBLE / View.INVISIBLE)。

      <ConstraintLayout
       android:visibility="gone">
       ...
      </ConstraintLayout>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-14
        • 2012-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多