FloatingActionButton setVisibility() 不工作
FloatingActionButton setVisibility() not working
我无法隐藏我的 FloatingActionButton
。这是我的代码:
XML:
<CoordinatorLayout>
<AppBarLayout android:id="@+id/appbar">
<CollapsingToolbarLayout>
<ImageView/>
<android.support.v7.widget.Toolbar />
</CollapsingToolbarLayout>
</AppBarLayout>
<NestedScrollView />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"/>
</CoordinatorLayout>
我打电话给:
fab.clearAnimation();
fab.setVisibility(View.GONE);
我试图隐藏 FAB,但如果 FAB 在 CoordinatorLayout
.
中,setVisibility
+ clearAnimation
似乎不起作用
即使我调用fab.clearAnimation
,动画仍然被触发。谁能帮帮我?
如果您的问题是动画,您可以尝试使 FAB 无效 Behavior
。至于可见性,你应该取消你在布局中设置的锚点:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(null); //should disable default animations
p.setAnchorId(View.NO_ID); //should let you set visibility
fab.setLayoutParams(p);
fab.setVisibility(View.GONE); // View.INVISIBLE might also be worth trying
//to bring things back to normal state
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(new FloatingActionButton.Behavior());
p.setAnchorId(R.id.appbar);
fab.setLayoutParams(p);
我运行进入完全相同的问题。当 FloatingActionButton 锚定到 AppBarLayout 时,Google 的 Android 团队似乎不希望您控制可见性,如本期所述 - FloatingActionButton Ignores View Visibility
看起来可行的修复方法是将 FAB 包装在 FrameLayout 中并改为在包装器上设置可见性,如下所示:
<android.support.design.widget.FrameLayout
android:id="@+id/fab_container"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:visibility="invisible">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fab_icon"/>
</android.support.design.widget.FrameLayout>
不过,您可能希望考虑这是否是理想的行为。 Google 拥护者建议在创建屏幕后立即显示 FAB。如果您将其隐藏的时间超过为其设置动画所需的时间,请考虑改为显示禁用状态。
你可以禁用它并使它像这样半透明
fab.setEnabled(false);
fab.setClickable(false);
fab.setAlpha(0.3f);
FloatingActionButton layers = (FloatingActionButton) findViewById(R.id.layers);
layers.hide();
它适用于我,setVisibility
不适用于 FloatingActionButton
,因为它属于另一个没有 setVisibility
方法的 viewGroup
。
使用 show 和 hide 方法显示和隐藏 Floating Action Button
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
// To show the Floating Action Button
fab.show();
// To hide the Floating Action Button
fab.hide();
对于 FloatingActionButton
,setVisibility()
方法在使用最新的 Gradle 6.x
和 build-tool 28.x.x
构建时会给您一个错误,并且不再被鼓励使用。 而是使用:
fab.hide() // fab.setVisibility(View.GONE)
fab.show() // fab.setVisibility(View.VISIBLE)
Note: Succesfully tested on Android Studio 3.4.1
, Gradle 6.0
and
build-tool 28.0.1
我无法隐藏我的 FloatingActionButton
。这是我的代码:
XML:
<CoordinatorLayout>
<AppBarLayout android:id="@+id/appbar">
<CollapsingToolbarLayout>
<ImageView/>
<android.support.v7.widget.Toolbar />
</CollapsingToolbarLayout>
</AppBarLayout>
<NestedScrollView />
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end"/>
</CoordinatorLayout>
我打电话给:
fab.clearAnimation();
fab.setVisibility(View.GONE);
我试图隐藏 FAB,但如果 FAB 在 CoordinatorLayout
.
setVisibility
+ clearAnimation
似乎不起作用
即使我调用fab.clearAnimation
,动画仍然被触发。谁能帮帮我?
如果您的问题是动画,您可以尝试使 FAB 无效 Behavior
。至于可见性,你应该取消你在布局中设置的锚点:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(null); //should disable default animations
p.setAnchorId(View.NO_ID); //should let you set visibility
fab.setLayoutParams(p);
fab.setVisibility(View.GONE); // View.INVISIBLE might also be worth trying
//to bring things back to normal state
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(new FloatingActionButton.Behavior());
p.setAnchorId(R.id.appbar);
fab.setLayoutParams(p);
我运行进入完全相同的问题。当 FloatingActionButton 锚定到 AppBarLayout 时,Google 的 Android 团队似乎不希望您控制可见性,如本期所述 - FloatingActionButton Ignores View Visibility
看起来可行的修复方法是将 FAB 包装在 FrameLayout 中并改为在包装器上设置可见性,如下所示:
<android.support.design.widget.FrameLayout
android:id="@+id/fab_container"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:visibility="invisible">
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fab_icon"/>
</android.support.design.widget.FrameLayout>
不过,您可能希望考虑这是否是理想的行为。 Google 拥护者建议在创建屏幕后立即显示 FAB。如果您将其隐藏的时间超过为其设置动画所需的时间,请考虑改为显示禁用状态。
你可以禁用它并使它像这样半透明
fab.setEnabled(false);
fab.setClickable(false);
fab.setAlpha(0.3f);
FloatingActionButton layers = (FloatingActionButton) findViewById(R.id.layers);
layers.hide();
它适用于我,setVisibility
不适用于 FloatingActionButton
,因为它属于另一个没有 setVisibility
方法的 viewGroup
。
使用 show 和 hide 方法显示和隐藏 Floating Action Button
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
// To show the Floating Action Button
fab.show();
// To hide the Floating Action Button
fab.hide();
对于 FloatingActionButton
,setVisibility()
方法在使用最新的 Gradle 6.x
和 build-tool 28.x.x
构建时会给您一个错误,并且不再被鼓励使用。 而是使用:
fab.hide() // fab.setVisibility(View.GONE)
fab.show() // fab.setVisibility(View.VISIBLE)
Note: Succesfully tested on
Android Studio 3.4.1
,Gradle 6.0
andbuild-tool 28.0.1