嗨,我正在使用Floating Action Button开发一个Android应用程序。
第一次,FAB图标显示图标图像。当我隐藏并显示之后,当我单击FAB图标时图标图像将为空白
这是用于隐藏FAB的代码
mainScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
// previousScrollY this variable is define in your Activity or Fragment
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG, "onScrollChanged: scrollview position " + mainScrollView.getScrollY() + " " +
previousScrollY + " " +
mainScrollView.getChildAt(0).getHeight());
if (mainScrollView.getScrollY() > previousScrollY) {
fab.hide();
} else if (mainScrollView.getScrollY() < previousScrollY) {
fab.show();
}
if (mainScrollView.getScrollY() >= mainScrollView.getChildAt(0).getHeight()) {
previousScrollY = mainScrollView.getChildAt(0).getHeight();
} else if (mainScrollView.getScrollY() < 0) {
previousScrollY = 0;
} else {
previousScrollY = mainScrollView.getScrollY();
}
}
}, 200);
}
});
向下滚动FAB图标将隐藏,而向上滚动则显示FAB图标。
这是FAB setOnClicklistener的代码
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
fab.setImageResource(R.drawable.ic_close);
} else {
sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
fab.setImageResource(R.drawable.ic_filter);
}
}
});
这是滚动并单击后的图像。
答案 0 :(得分:2)
我知道您发布此消息已经很长时间了,但是我遇到了同样的问题。我通过在单击后对工厂执行hide()和show()来解决该问题。 (在我的特定情况下,我在onClick中更改了可绘制对象。在更改可绘制对象之后执行hide()和show()解决了该问题。)
您的代码应如下所示:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sheetBehavior.getState() != BottomSheetBehavior.STATE_EXPANDED) {
sheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
fab.setImageResource(R.drawable.ic_close);
} else {
sheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
fab.setImageResource(R.drawable.ic_filter);
}
fab.hide();
fab.show();
}
});
答案 1 :(得分:2)
依赖项com.google.android.material:material:1.0.0
遇到相同的问题。将版本升级到1.1.0-alpha3
可以解决此问题。
答案 2 :(得分:1)
您的代码看起来不错。我认为,可能会导致该行为的唯一原因是您的onScrollChanged
中的延迟处理程序。请转到全局FloatingActionButton fab
的声明,并将其设置为static
。看看是否有帮助。
PS:如果确实没有帮助,请尝试将fab.hide()
替换为fab.setVisibility(View.INVISIBLE)
,将fab.show()
替换为fab.setVisibility(View.VISIBLE)
。
答案 3 :(得分:0)
使用此
fab.setVisibility(View.VISIBLE); && fab.setVisibility(View.GONE);
已插入
fab.show(); && fab.hide();
答案 4 :(得分:0)
我通过调用函数hide和在onCreateView中再次显示来解决它
fab.hide();
fab.show();