滚动时 FloatActionButton 不隐藏
FloatActionButton is not hiding when scrolling
我试图在 Activity 中向下滚动时隐藏我的 FAB,但无法正常工作。为什么???片段标签内有带有 RecyclerView 的片段。
这是我的 Activity xml 代码:
<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/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.principal.PrincipalActivity">
<fragment
android:id="@+id/PrincipalActivity_navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/principal_nav_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/PrincipalActivity_bottom_navigation"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorPrimary"
app:itemIconTint="@drawable/bottom_navigation_colors"
app:itemTextColor="@android:color/white"
app:layout_anchor="@id/PrincipalActivity_navHostFragment"
app:layout_anchorGravity="bottom"
app:menu="@menu/bottom_navigation_menu_principal" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/PrincipalActivity_fabItensPedido"
style="@style/Widget.MaterialComponents.FloatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginBottom="70dp"
android:src="@drawable/ic_carrinho"
app:backgroundTint="@color/colorAccent"
app:fabSize="auto"
app:layout_anchor="@id/PrincipalActivity_navHostFragment"
app:layout_anchorGravity="bottom|end"
app:layout_behavior=".utils.ScrollAnimationFAB" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
这是我在 FAB 按钮中使用的布局行为,但在 activity 中不起作用,仅在片段标签内的片段中起作用。
class ScrollAnimationFAB extends CoordinatorLayout.Behavior<FloatingActionButton> {
public ScrollAnimationFAB(){
super();
}
public ScrollAnimationFAB(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull FloatingActionButton child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
return axes == ViewCompat.SCROLL_AXIS_VERTICAL ||
super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
axes, ViewCompat.TYPE_TOUCH);
}
@Override
public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull FloatingActionButton child, @NonNull View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, @NonNull int[] consumed) {
Log.v("Msg", "dyConsumed: " + dyConsumed + ", dyUnConsumed: " + dyUnconsumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
child.hide(new FloatingActionButton.OnVisibilityChangedListener() {
@Override
public void onHidden(FloatingActionButton fab) {
super.onHidden(fab);
fab.setVisibility(View.INVISIBLE);
}
});
} else if (dyConsumed < 0 && dyUnconsumed == 0 && child.getVisibility() != View.VISIBLE) {
child.show();
}
}
}
请帮帮我
浮动操作按钮为您提供了一种很好的方法fab.hide()
如果 FloatingActionButton 在 CoordinatorLayout 中 - 你应该使用下面的代码:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) playlist_FAB_start.getLayoutParams();
p.setAnchorId(View.NO_ID);
playlist_FAB_start.setLayoutParams(p);
playlist_FAB_start.setVisibility(View.GONE);
我这样解决问题:
recyclerView =
rootView.findViewById<RecyclerView>(R.id.recyclerView).apply {
this.setHasFixedSize(true)
this.layoutManager = LinearLayoutManager(activity?.baseContext)
this.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dy > 0)
activity_fab.hide()
else
activity_fab.show()
}
})
}
FAB 视图在我的 activity 中。但是上面的这段代码在片段中。我在片段中这样称呼 FAB:(activity as AppCompatActivity).findViewById(R.id.activity_fab)
.
我试图在 Activity 中向下滚动时隐藏我的 FAB,但无法正常工作。为什么???片段标签内有带有 RecyclerView 的片段。
这是我的 Activity xml 代码:
<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/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".activities.principal.PrincipalActivity">
<fragment
android:id="@+id/PrincipalActivity_navHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/principal_nav_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/PrincipalActivity_bottom_navigation"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorPrimary"
app:itemIconTint="@drawable/bottom_navigation_colors"
app:itemTextColor="@android:color/white"
app:layout_anchor="@id/PrincipalActivity_navHostFragment"
app:layout_anchorGravity="bottom"
app:menu="@menu/bottom_navigation_menu_principal" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/PrincipalActivity_fabItensPedido"
style="@style/Widget.MaterialComponents.FloatingActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginBottom="70dp"
android:src="@drawable/ic_carrinho"
app:backgroundTint="@color/colorAccent"
app:fabSize="auto"
app:layout_anchor="@id/PrincipalActivity_navHostFragment"
app:layout_anchorGravity="bottom|end"
app:layout_behavior=".utils.ScrollAnimationFAB" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
这是我在 FAB 按钮中使用的布局行为,但在 activity 中不起作用,仅在片段标签内的片段中起作用。
class ScrollAnimationFAB extends CoordinatorLayout.Behavior<FloatingActionButton> {
public ScrollAnimationFAB(){
super();
}
public ScrollAnimationFAB(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull FloatingActionButton child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
return axes == ViewCompat.SCROLL_AXIS_VERTICAL ||
super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target,
axes, ViewCompat.TYPE_TOUCH);
}
@Override
public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull FloatingActionButton child, @NonNull View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type, @NonNull int[] consumed) {
Log.v("Msg", "dyConsumed: " + dyConsumed + ", dyUnConsumed: " + dyUnconsumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
child.hide(new FloatingActionButton.OnVisibilityChangedListener() {
@Override
public void onHidden(FloatingActionButton fab) {
super.onHidden(fab);
fab.setVisibility(View.INVISIBLE);
}
});
} else if (dyConsumed < 0 && dyUnconsumed == 0 && child.getVisibility() != View.VISIBLE) {
child.show();
}
}
}
请帮帮我
浮动操作按钮为您提供了一种很好的方法fab.hide()
如果 FloatingActionButton 在 CoordinatorLayout 中 - 你应该使用下面的代码:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) playlist_FAB_start.getLayoutParams();
p.setAnchorId(View.NO_ID);
playlist_FAB_start.setLayoutParams(p);
playlist_FAB_start.setVisibility(View.GONE);
我这样解决问题:
recyclerView =
rootView.findViewById<RecyclerView>(R.id.recyclerView).apply {
this.setHasFixedSize(true)
this.layoutManager = LinearLayoutManager(activity?.baseContext)
this.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
if (dy > 0)
activity_fab.hide()
else
activity_fab.show()
}
})
}
FAB 视图在我的 activity 中。但是上面的这段代码在片段中。我在片段中这样称呼 FAB:(activity as AppCompatActivity).findViewById(R.id.activity_fab)
.