fre*_*v20 40 android material-design floating-action-button android-design-library
我试图以fabLocation
编程方式隐藏我的FloatingActionButton :
fabLocation.setVisibility(View.GONE)
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
如果我添加android:visibility="gone"
我的XML布局,fabLocation
当我运行我的活动时会隐藏它,但是当我滚动时它会重新出现.
这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@color/colorOverlay"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<ImageView
android:id="@+id/img_couverture"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/bg_navigation_drawer_header"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.CardView
android:layout_marginTop="8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp" />
<View
android:background="@drawable/separator_orange_gradient"
android:layout_marginTop="8dp"
android:layout_marginBottom="16dp"
android:layout_width="match_parent"
android:layout_height="2dp"/>
<TextView
android:id="@+id/tv_history"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.RobotoLight" />
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:clickable="true"
android:id="@+id/fab_location"
android:src="@drawable/ic_fab_location_24dp"
app:backgroundTint="@color/colorOrange"
app:layout_anchor="@id/appbar"
app:layout_anchorGravity="bottom|right|end" />
Run Code Online (Sandbox Code Playgroud)
nat*_*rio 43
这是由于app:layout_anchor
属性.在更改可见性之前,您必须摆脱锚点:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setAnchorId(View.NO_ID);
fab.setLayoutParams(p);
fab.setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)
Chr*_*nes 12
锚定到AppBarLayouts的FloatingActionButtons具有特殊关系,其可见性由AppBarLayout的滚动位置控制.
您可以通过以下behavior_autoHide
属性将其关闭:
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_anchor="..."
app:behavior_autoHide="false"/>
Run Code Online (Sandbox Code Playgroud)
如果您愿意,也可以以编程方式执行此操作:
CoordinatorLayout.LayoutParams lp = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
FloatingActionButton.Behavior behavior = (FloatingActionButton.Behavior) lp.getBehavior();
if (behavior != null) {
behavior.setAutoHideEnabled(false);
} else {
behavior = new FloatingActionButton.Behavior();
behavior.setAutoHideEnabled(false);
lp.setBehavior(behavior);
}
Run Code Online (Sandbox Code Playgroud)
Bry*_*yan 10
我对发布的任何解决方案都不满意.有些人只在部分时间工作,而其他人只工作fab.setVisibility()
.虽然我知道这在技术上是原始问题所要求的,但是一些回复表示对使用感兴趣fab.hide()
,并且弄乱布局参数并没有完全找到问题的根源.
正如@ChrisBanes所指出的,与之FloatingActionButton.Behavior
相关的AppBarLayout
是导致问题的原因.因此,正如他的回答一样,您必须setAutoHideEnabled(false)
禁用该功能.但是,如果您确实希望FloatingActionButton
自动隐藏以及hide()
手动调用时,此解决方案无效.
所以为了做到这一点; 我只是在手动隐藏之前禁用自动隐藏功能Button
,然后在我手动显示后重新启用功能Button
:
private void hideFloatingActionButton(FloatingActionButton fab) {
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) fab.getLayoutParams();
FloatingActionButton.Behavior behavior =
(FloatingActionButton.Behavior) params.getBehavior();
if (behavior != null) {
behavior.setAutoHideEnabled(false);
}
fab.hide();
}
private void showFloatingActionButton(FloatingActionButton fab) {
fab.show();
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) fab.getLayoutParams();
FloatingActionButton.Behavior behavior =
(FloatingActionButton.Behavior) params.getBehavior();
if (behavior != null) {
behavior.setAutoHideEnabled(true);
}
}
Run Code Online (Sandbox Code Playgroud)
FloatingActionButton layers = (FloatingActionButton) findViewById(R.id.layers);
layers.hide();
Run Code Online (Sandbox Code Playgroud)
它对我有用,对它setVisibility
不起作用,FloatingActionButton
因为它属于另一个viewGroup
没有setVisibility
方法的东西。
如果要显示隐藏的FAB
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
android:fitsSystemWindows="true">
...
</android.support.design.widget.AppBarLayout>
...
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:clickable="true"/>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
和
CoordinatorLayout.LayoutParams p = new CoordinatorLayout.LayoutParams(CoordinatorLayout.LayoutParams.WRAP_CONTENT, CoordinatorLayout.LayoutParams.WRAP_CONTENT);
p.anchorGravity = Gravity.BOTTOM | Gravity.END;
p.setAnchorId(R.id.appbar);
p.setMargins(...);
fab.setLayoutParams(p);
fab.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)
小智 5
隐藏和显示浮动操作栏的最简单方法是在您的活动中调用它。
隐藏:
nameOfYourFAB.Hide();
Run Code Online (Sandbox Code Playgroud)
显示:
nameOfYourFAB.Show();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38859 次 |
最近记录: |