我有一个标签式布局,使用SmartTabLayout,右下角有一个FloatingActionButton。当我转换到另一个页面时,我想隐藏FloatingActionButton,然后使其重新显示为不同的颜色和不同的图标。但是当我调用hide()方法时,更改图标,然后调用show()方法,hide()方法在调用show()之前没有完成它的动画,导致FloatingActionButton没有重现。
为什么我这样做?根据找到的here浮动操作按钮的材料设计,在处理选项卡式布局时应遵循以下两条规则:
我的第一个想法是拥有一个FloatingActionButton,只需改变它的颜色和行为,无论我在哪个页面上。这种做法很好,没有消失的行为。然后我尝试向每个页面片段添加一个FloatingActionButton,但后来我得到了不希望的FloatingActionButton结果与页面一起刷掉(#2中的禁忌)。
所以,现在我回到了一个FloatingActionButton。
我尝试过另一件事:
所以,如果有人能指出我正确的方向,那将非常感激。
当前代码:
HomeTabBar bar = new HomeTabBar();
ViewGroup tab = (ViewGroup) findViewById(R.id.container);
tab.addView(LayoutInflater.from(this).inflate( R.layout.demo_custom_tab_icons1 , tab, false));
mViewPager = (ViewPager) findViewById(R.id.viewpager);
SmartTabLayout viewPagerTab = (SmartTabLayout) findViewById(R.id.viewpagertab);
final ViewGroup view = (ViewGroup) findViewById(android.R.id.content);
viewPagerTab.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
private int currentPage;
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
currentPage = position;
}
@Override
public void onPageScrollStateChanged(int state) {
int colorIndex = Color.RED;
mFab.hide();
switch (currentPage) {
case 0:
colorIndex = Color.RED;
mFab.setImageDrawable(getResources().getDrawable(R.drawable.plus_sign));
mFab.show();
break;
case 2:
colorIndex = Color.argb(255, 76, 175, 80);
mFab.setImageDrawable(getResources().getDrawable(R.drawable.ic_add_bowling_ball_white_24dp));
mFab.show();
break;
case 3: colorIndex = Color.BLUE;
mFab.setImageDrawable(getResources().getDrawable(R.drawable.ic_add_location_white_24dp));
mFab.show();
break;
default: // Leaves the FAB hidden on any other tabs
break;
}
mFab.setBackgroundTintList(ColorStateList.valueOf(colorIndex));
}
});
bar.setup(viewPagerTab);
FragmentPagerItems pages = new FragmentPagerItems(this);
for (Integer title : bar.tabs()) {
switch( title ) {
case R.string.player_fragment_tag:
pages.add(FragmentPagerItem.of(getString(title), PlayerFragment.class));
break;
case R.string.series_fragment_tag:
pages.add(FragmentPagerItem.of( getString( title ), SeriesFragment.class));
break;
case R.string.balls_fragment_tag:
pages.add(FragmentPagerItem.of( getString( title ), BallsFragment.class));
break;
case R.string.location_fragment_tag:
pages.add(FragmentPagerItem.of( getString( title ), BowlingAlleyFragment.class));
break;
default:
break;
}
}
FragmentPagerItemAdapter adapter = new FragmentPagerItemAdapter(
getSupportFragmentManager(), pages){
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
};
mViewPager.setAdapter(adapter);
viewPagerTab.setViewPager(mViewPager);
mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mToolbar);
答案 0 :(得分:3)
我有类似的问题。晶圆厂出现后,我想展示一个Snackbar。我这样解决了:
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
FloatingActionButton.OnVisibilityChangedListener fabListener;
fabListener = new FloatingActionButton.OnVisibilityChangedListener(){
@Override
public void onShown(FloatingActionButton fab) {
Snackbar.make(fab, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
super.onShown(fab);
}
};
fab.show(fabListener);
我认为您只需要使用fab.hide(fabListener)和更改颜色后调用fab.show()的onHidden()方法。
问候