【问题标题】:Framelayout becomes invisible but still occupies spaceFramelayout变得不可见但仍然占用空间
【发布时间】:2018-11-26 23:14:54
【问题描述】:

我有一个 xml 文件,我在其中管理 java 端的框架布局的可见性。 xml 有 2 个框架布局作为线性布局上的按钮。方向是水平的。一旦我隐藏了右边的第一个按钮,左边的按钮就会留在他的位置,但它应该向右移动。

任何想法如何解决这个问题?

这是我的 xml 代码:

  <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_gravity="bottom|end">

    <FrameLayout
        android:id="@+id/btn1"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:background="@drawable/float_button"
        android:visibility="gone">
        <ImageView

            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_gravity="center"
            android:id="@+id/icon2" />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/btn2"
        android:layout_width="75dp"
        android:layout_height="75dp"
        android:background="@drawable/float_button"
        android:visibility="gone">
        <ImageView
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:layout_gravity="center"
            android:id="@+id/icon1"
            >

        </ImageView>
    </FrameLayout>
</LinearLayout>

我的java代码:

@Override
    public void notifyLayoutReady() {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                if (showUserOption("option1"))
                    mBtn1.setVisibility(View.VISIBLE);
                if (showUserOption("option2"))
                    mBtn2.setVisibility(View.VISIBLE);
            }
        });
    }

【问题讨论】:

  • 使用 else 语句再次隐藏该视图 if (showUserOption("option1")) mBtn1.setVisibility(View.VISIBLE); else{mBtn1.setVisibility(View.GONE);} if (showUserOption("option2")) mBtn2.setVisibility(View.VISIBLE); else{mBtn2.setVisibility(View.Gone);}

标签: android visibility android-framelayout


【解决方案1】:

似乎在单击按钮并设置可见性时您正在使用 View.INVISIBLE ,尝试使用 View.GONE 相同。

【讨论】:

  • 默认情况下它已经消失了,在 java 端我调用 View.VISIBLE 但它仍然占用空间
  • 当第二个语句为真时,您不会隐藏第一个布局。使用 if(){} else {} 并在 else 中隐藏此布局。
  • 谢谢,但我不明白,如果它已经在 xml 上消失了,为什么还要在 java 代码上再次调用它?
  • 任何情况下总有两个阶段。 if(){} 和 else{}... 现在,当您在 1 个案例上显示某些内容时,在其他案例上应该隐藏它。否则,在多次尝试相同的场景时,情况会产生误导。
【解决方案2】:

有两种方法可以用来代替隐形..

        android:visibility="invisible"

或将重力设置为如下布局..

        android:layout_gravity="left"
        android:layout_gravity="right"

两个框架布局因为消失了是删除所有空间和不可见只隐藏视图但空间是剩余的。

【讨论】:

    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2010-11-15
    相关资源
    最近更新 更多