package it.sephiroth.android.library.bottomnavigation.app; import android.annotation.TargetApi; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.annotation.IdRes; import android.support.design.widget.CoordinatorLayout; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import it.sephiroth.android.library.bottomnavigation.BadgeProvider; import it.sephiroth.android.library.bottomnavigation.BottomNavigation; import it.sephiroth.android.library.bottomnavigation.FloatingActionButtonBehavior; import static android.util.Log.INFO; import static android.util.Log.VERBOSE; import static it.sephiroth.android.library.bottomnavigation.MiscUtils.log; @TargetApi (Build.VERSION_CODES.KITKAT_WATCH) public class MainActivity extends BaseActivity implements BottomNavigation.OnMenuItemSelectionListener { static final String TAG = MainActivity.class.getSimpleName(); public static final int MENU_TYPE_3_ITEMS = 0; public static final int MENU_TYPE_3_ITEMS_NO_BACKGROUND = 1; public static final int MENU_TYPE_4_ITEMS = 2; public static final int MENU_TYPE_4_ITEMS_NO_BACKGROUND = 3; public static final int MENU_TYPE_5_ITEMS = 4; public static final int MENU_TYPE_5_ITEMS_NO_BACKGROUND = 5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); BottomNavigation.DEBUG = BuildConfig.DEBUG; setContentView(getActivityLayoutResId()); final ViewGroup root = (ViewGroup) findViewById(R.id.CoordinatorLayout01); final CoordinatorLayout coordinatorLayout; if (root instanceof CoordinatorLayout) { coordinatorLayout = (CoordinatorLayout) root; } else { coordinatorLayout = null; } final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final int statusbarHeight = getStatusBarHeight(); final boolean translucentStatus = hasTranslucentStatusBar(); final boolean translucentNavigation = hasTranslucentNavigation(); log(TAG, VERBOSE, "translucentStatus: %b", translucentStatus); if (translucentStatus) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) root.getLayoutParams(); params.topMargin = -statusbarHeight; params = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams(); params.topMargin = statusbarHeight; } if (translucentNavigation) { final ViewPager viewPager = getViewPager(); if (null != viewPager) { ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) viewPager.getLayoutParams(); params.bottomMargin = -getNavigationBarHeight(); } } initializeBottomNavigation(savedInstanceState); initializeUI(savedInstanceState); } protected int getActivityLayoutResId() {return R.layout.activity_main;} protected void initializeBottomNavigation(final Bundle savedInstanceState) { if (null == savedInstanceState) { getBottomNavigation().setDefaultSelectedIndex(0); final BadgeProvider provider = getBottomNavigation().getBadgeProvider(); provider.show(R.id.bbn_item3); provider.show(R.id.bbn_item4); } } protected void initializeUI(final Bundle savedInstanceState) { final FloatingActionButton floatingActionButton = (FloatingActionButton) findViewById(R.id.fab); if (null != floatingActionButton) { floatingActionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final View root = findViewById(R.id.CoordinatorLayout01); Snackbar snackbar = Snackbar.make(root, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction( "Action", null ); snackbar.show(); } }); if (hasTranslucentNavigation()) { final ViewGroup.LayoutParams params = floatingActionButton.getLayoutParams(); if (CoordinatorLayout.LayoutParams.class.isInstance(params)) { CoordinatorLayout.LayoutParams params1 = (CoordinatorLayout.LayoutParams) params; if (FloatingActionButtonBehavior.class.isInstance(params1.getBehavior())) { ((FloatingActionButtonBehavior) params1.getBehavior()).setNavigationBarHeight(getNavigationBarHeight()); } } } } final ViewPager viewPager = getViewPager(); if (null != viewPager) { getBottomNavigation().setOnMenuChangedListener(new BottomNavigation.OnMenuChangedListener() { @Override public void onMenuChanged(final BottomNavigation parent) { viewPager.setAdapter(new ViewPagerAdapter(MainActivity.this, parent.getMenuItemCount())); viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled( final int position, final float positionOffset, final int positionOffsetPixels) { } @Override public void onPageSelected(final int position) { if (getBottomNavigation().getSelectedIndex() != position) { getBottomNavigation().setSelectedIndex(position, false); } } @Override public void onPageScrollStateChanged(final int state) { } }); } }); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { final int id = item.getItemId(); switch (id) { case R.id.item1: return setMenuType(MENU_TYPE_3_ITEMS); case R.id.item2: return setMenuType(MENU_TYPE_3_ITEMS_NO_BACKGROUND); case R.id.item3: return setMenuType(MENU_TYPE_4_ITEMS); case R.id.item4: return setMenuType(MENU_TYPE_4_ITEMS_NO_BACKGROUND); case R.id.item5: return setMenuType(MENU_TYPE_5_ITEMS); case R.id.item6: return setMenuType(MENU_TYPE_5_ITEMS_NO_BACKGROUND); case R.id.item7: startActivity(new Intent(this, MainActivityTablet.class)); return true; case R.id.item8: startActivity(new Intent(this, MainActivityTabletCollapsedToolbar.class)); return true; case R.id.item9: startActivity(new Intent(this, MainActivityCustomBehavior.class)); return true; case R.id.item10: startActivity(new Intent(this, MainActivityCustomBadge.class)); return true; case R.id.item11: startActivity(new Intent(this, MainActivityNoHide.class)); return true; case R.id.item12: startActivity(new Intent(this, EnableDisableItemsActivity.class)); return true; case R.id.item13: startActivity(new Intent(this, MainActivityNoCoordinator.class)); return true; } return super.onOptionsItemSelected(item); } public boolean setMenuType(final int type) { BottomNavigation navigation = getBottomNavigation(); if (null == navigation) { return false; } switch (type) { case MENU_TYPE_3_ITEMS: navigation.inflateMenu(R.menu.bottombar_menu_3items); break; case MENU_TYPE_3_ITEMS_NO_BACKGROUND: navigation.inflateMenu(R.menu.bottombar_menu_3items_no_background); break; case MENU_TYPE_4_ITEMS: navigation.inflateMenu(R.menu.bottombar_menu_4items); break; case MENU_TYPE_4_ITEMS_NO_BACKGROUND: navigation.inflateMenu(R.menu.bottombar_menu_4items_no_background); break; case MENU_TYPE_5_ITEMS: navigation.inflateMenu(R.menu.bottombar_menu_5items); break; case MENU_TYPE_5_ITEMS_NO_BACKGROUND: navigation.inflateMenu(R.menu.bottombar_menu_5items_no_background); break; } return true; } @Override public void onMenuItemSelect(final int itemId, final int position, final boolean fromUser) { log(TAG, INFO, "onMenuItemSelect(" + itemId + ", " + position + ", " + fromUser + ")"); if (fromUser) { getBottomNavigation().getBadgeProvider().remove(itemId); if (null != getViewPager()) { getViewPager().setCurrentItem(position); } } } @Override public void onMenuItemReselect(@IdRes final int itemId, final int position, final boolean fromUser) { log(TAG, INFO, "onMenuItemReselect(" + itemId + ", " + position + ", " + fromUser + ")"); if (fromUser) { final FragmentManager manager = getSupportFragmentManager(); MainActivityFragment fragment = (MainActivityFragment) manager.findFragmentById(R.id.fragment); if (null != fragment) { fragment.scrollToTop(); } } } public static class ViewPagerAdapter extends FragmentPagerAdapter { private final int mCount; public ViewPagerAdapter(final AppCompatActivity activity, int count) { super(activity.getSupportFragmentManager()); this.mCount = count; } @Override public Fragment getItem(final int position) { return new MainActivityFragment(); } @Override public int getCount() { return mCount; } } }