![](/img/trans.png)
[英]Android Studio doesn't see the FloatingActionButton hide()/show() methods
[英]Android FloatingActionButton Hide/Show On Page Change
我有一個標簽式布局,使用SmartTabLayout ,右下角有一個FloatingActionButton。 當我轉換到另一個頁面時,我想隱藏FloatingActionButton,然后使其重新顯示為不同的顏色和不同的圖標。 但是當我調用hide()方法時,更改圖標,然后調用show()方法,hide()方法在調用show()之前沒有完成動畫,導致FloatingActionButton不再出現。
我為什么要這樣做? 根據此處的浮動操作按鈕的材料設計,在處理選項卡式布局時應遵循以下兩個規則:
我的第一個想法是有一個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);
我遇到了類似的問題。 晶圓廠出現后,我想展示一個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)和onHidden()方法,在更改顏色后調用fab.show()。
問候
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.