安卓:visibility属性设置为gone的元素短暂可见。

3

你好,

我遇到了一个问题,当FloatingActionButton的可见性设置为GONE时,在打开活动时会短暂地显示出来,然后像应该的那样消失。

这个按钮在稍后的某个时间点使用,所以必须是不可见的。但是目前如果有人足够快(主要是在旧设备/Android版本上),他就可以在应该允许之前单击该按钮。

我的布局与由Android Studio创建的布局几乎相同,只是我将可见性设置为gone:

<android.support.design.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:layout_width="match_parent"
android:layout_height="match_parent" android:fitsSystemWindows="true"
tools:context="com.fallenritemonk.ludus.game.GameActivity">

<android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
    android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar android:id="@+id/toolbar"
        android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>

<include layout="@layout/content_game" />

<android.support.design.widget.FloatingActionButton
    android:id="@+id/add_fields_fab"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|end"
    android:layout_margin="@dimen/fab_margin"
    android:src="@drawable/ic_add"
    android:visibility="gone" />

</android.support.design.widget.CoordinatorLayout>

content_game.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.fallenritemonk.ludus.game.GameActivity">

<GridView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/fieldGrid"
    android:numColumns="9"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="5dp" />

</RelativeLayout>

我不知道问题出在哪里。我尝试将它设置为INVISIBLE而不是GONE。由于我无法确定用户是否足够快地按下按钮,因此防止他这样做的唯一可能性是消除“快速上升FAB”错误。

如果需要更多信息,请随时询问!

谢谢你的帮助。


当您将fab设置为可见时,此XML表示fab将始终为GONE。 - droidev
发布相关的Java代码 - johnrao07
问题不在于稍后设置按钮可见,而是即使我不将其设置为可见,在启动活动时它仍然会非常短暂地显示出来。 - FallenRiteMonk
4个回答

0
只需在您的onCreate()方法(或使用Fragment时的onCreateView()方法)中添加fab.hide()即可。您可以从xml中删除visibility标记,因为它将不再需要。如果您想显示FAB,请使用fab.show()。

从 xml 中删除任何 setVisiblity() 方法,也删除 android:visibility="gone"。我在我的项目中遇到了同样的问题,它可以使用 hide() / show() 方法解决。不要使用 setVisibility() 方法来管理 FloatingActionButton 的可见性。 - Tomislav Turcic

0

由于我的声誉不够,无法评论,所以在这里回答您的问题。 请尝试将标签android.support.design.widget.FloatingActionButton放在include之前。如果这样做没有帮助,请提供content_game的内容。


没有区别!我在我的问题中添加了content_game.xml。 - FallenRiteMonk

0

问题似乎已经通过更新Android支持设计库得到解决。我现在已将其从23.0.1更新到了23.1.1!


0

尝试禁用锚点id,然后设置可见性。应该可以解决问题。

请尝试以下操作:

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
CoordinatorLayout.LayoutParams param = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
param.setBehavior(null);
param.setAnchorId(View.NO_ID);
fab.setLayoutParams(param);
fab.setVisibility(View.GONE);

// TO show again
param.setBehavior(new FloatingActionButton.Behavior());
param.setAnchorId(R.id.appbar);
fab.setVisibility(View.VISIBLE);

不行,这样做不起作用。在启动活动时,该按钮仍会短暂显示! - FallenRiteMonk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接