Vu que la nouvelle recommandation est sortie et utilisée dans la dernière application google photos
. Je ne sais pas comment utiliser la nouvelle barre de navigation inférieure .
Impossible de trouver un échantillon officiel.
Comment utiliser la nouvelle barre inférieure? Je ne veux pas faire de personnaliser.
Je pense que vous pourriez chercher cela.
Voici un extrait pour bien commencer:
public class MainActivity extends AppCompatActivity {
private BottomBar mBottomBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Notice how you don't use the setContentView method here! Just
// pass your layout to bottom bar, it will be taken care of.
// Everything will be just like you're used to.
mBottomBar = BottomBar.bind(this, R.layout.activity_main,
savedInstanceState);
mBottomBar.setItems(
new BottomBarTab(R.drawable.ic_recents, "Recents"),
new BottomBarTab(R.drawable.ic_favorites, "Favorites"),
new BottomBarTab(R.drawable.ic_nearby, "Nearby"),
new BottomBarTab(R.drawable.ic_friends, "Friends")
);
mBottomBar.setOnItemSelectedListener(new OnTabSelectedListener() {
@Override
public void onItemSelected(final int position) {
// the user selected a new tab
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mBottomBar.onSaveInstanceState(outState);
}
}
Voici le lien de référence.
https://github.com/roughike/BottomBar
EDIT Nouveautés.
La vue de navigation inférieure figure depuis un certain temps déjà dans les instructions de conception des matériaux, mais il n’a pas été facile pour nous de l’implémenter dans nos applications. Certaines applications ont construit leurs propres solutions, tandis que d'autres ont eu recours à des bibliothèques tierces à code source ouvert pour faire le travail. La bibliothèque d’aide à la conception voit maintenant l’ajout de cette barre de navigation inférieure. Voyons maintenant comment nous pouvons l’utiliser!
Comment utiliser ?
Pour commencer, nous devons mettre à jour notre dépendance!
compile ‘com.Android.support:design:25.0.0’
Design xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<!-- Content Container -->
<Android.support.design.widget.BottomNavigationView
Android:id="@+id/bottom_navigation"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@color/white"
app:itemTextColor="@color/white"
app:menu="@menu/bottom_navigation_main" />
</RelativeLayout>
Créer un menu selon vos besoins.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<item
Android:id="@+id/action_favorites"
Android:enabled="true"
Android:icon="@drawable/ic_favorite_white_24dp"
Android:title="@string/text_favorites"
app:showAsAction="ifRoom" />
<item
Android:id="@+id/action_schedules"
Android:enabled="true"
Android:icon="@drawable/ic_access_time_white_24dp"
Android:title="@string/text_schedules"
app:showAsAction="ifRoom" />
<item
Android:id="@+id/action_music"
Android:enabled="true"
Android:icon="@drawable/ic_audiotrack_white_24dp"
Android:title="@string/text_music"
app:showAsAction="ifRoom" />
</menu>
Gestion des états activés/désactivés. Faire un fichier de sélecteur.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:state_checked="true"
Android:color="@color/colorPrimary" />
<item
Android:state_checked="false"
Android:color="@color/grey" />
</selector>
Gérer les événements de clic.
BottomNavigationView bottomNavigationView = (BottomNavigationView)
findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_favorites:
break;
case R.id.action_schedules:
break;
case R.id.action_music:
break;
}
return false;
}
});
Si vous voulez en savoir plus sur ses méthodes et son fonctionnement lisez ceci.
Cela vous aidera sûrement.
Vous devez utiliser BottomNavigationView à partir de la bibliothèque de support Android v25 . Il représente une barre de navigation inférieure standard pour les applications.
Voici un article sur Medium qui comporte pas à pas:https://medium.com/@hitherejoe/exploring-the-Android-design-support-library-bottom-navigation- tiroir-548de699e8e0 # .9vmiekxze
Vous pouvez également utiliser la disposition des onglets avec une vue en onglet personnalisée pour y parvenir.
custom_tab.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="?attr/selectableItemBackground"
Android:gravity="center"
Android:orientation="vertical"
Android:paddingBottom="10dp"
Android:paddingTop="8dp">
<ImageView
Android:id="@+id/icon"
Android:layout_width="24dp"
Android:layout_height="24dp"
Android:scaleType="centerInside"
Android:src="@drawable/ic_recents_selector" />
<TextView
Android:id="@+id/title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:ellipsize="end"
Android:maxLines="1"
Android:textAllCaps="false"
Android:textColor="@color/tab_color"
Android:textSize="12sp"/>
</LinearLayout>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<Android.support.v4.view.ViewPager
Android:id="@+id/view_pager"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight="1" />
<Android.support.design.widget.TabLayout
Android:id="@+id/tab_layout"
style="@style/AppTabLayout"
Android:layout_width="match_parent"
Android:layout_height="56dp"
Android:background="?attr/colorPrimary" />
</LinearLayout>
MainActivity.Java
public class MainActivity extends AppCompatActivity {
private TabLayout mTabLayout;
private int[] mTabsIcons = {
R.drawable.ic_recents_selector,
R.drawable.ic_favorite_selector,
R.drawable.ic_place_selector};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setup the viewPager
ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
MyPagerAdapter pagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
mTabLayout = (TabLayout) findViewById(R.id.tab_layout);
mTabLayout.setupWithViewPager(viewPager);
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
TabLayout.Tab tab = mTabLayout.getTabAt(i);
tab.setCustomView(pagerAdapter.getTabView(i));
}
mTabLayout.getTabAt(0).getCustomView().setSelected(true);
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public final int PAGE_COUNT = 3;
private final String[] mTabsTitle = {"Recents", "Favorites", "Nearby"};
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
public View getTabView(int position) {
// Given you have a custom layout in `res/layout/custom_tab.xml` with a TextView and ImageView
View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.custom_tab, null);
TextView title = (TextView) view.findViewById(R.id.title);
title.setText(mTabsTitle[position]);
ImageView icon = (ImageView) view.findViewById(R.id.icon);
icon.setImageResource(mTabsIcons[position]);
return view;
}
@Override
public Fragment getItem(int pos) {
switch (pos) {
case 0:
return PageFragment.newInstance(1);
case 1:
return PageFragment.newInstance(2);
case 2:
return PageFragment.newInstance(3);
}
return null;
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public CharSequence getPageTitle(int position) {
return mTabsTitle[position];
}
}
}
Comme Sanf0rd l'a mentionné, Google a lancé BottomNavigationView en tant que faisant partie de la bibliothèque de support technique de la version 25.0.0. Les limitations qu'il a mentionnées sont pour la plupart vraies, sauf que vous POUVEZ changer la couleur d'arrière-plan de la vue et même la couleur du texte et la teinte de l'icône. Il comporte également une animation lorsque vous ajoutez plus de 4 éléments (malheureusement, il ne peut pas être activé ou désactivé manuellement).
J'ai écrit un tutoriel détaillé à ce sujet avec des exemples et un référentiel, que vous pouvez lire ici:https://blog.autsoft.hu/now-you-can-use-the-bottom -navigation-view-in-the-design-support-library/
Vous devez les ajouter dans votre niveau d'application build.gradle
:
compile 'com.Android.support:appcompat-v7:25.0.0'
compile 'com.Android.support:design:25.0.0'
Vous pouvez l'inclure dans votre mise en page comme ceci:
<Android.support.design.widget.BottomNavigationView
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/bottom_navigation_view"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:itemBackground="@color/darkGrey"
app:itemIconTint="@color/bottom_navigation_item_background_colors"
app:itemTextColor="@color/bottom_navigation_item_background_colors"
app:menu="@menu/menu_bottom_navigation" />
Vous pouvez spécifier les éléments via une ressource de menu comme ceci:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:id="@+id/action_one"
Android:icon="@Android:drawable/ic_dialog_map"
Android:title="One"/>
<item
Android:id="@+id/action_two"
Android:icon="@Android:drawable/ic_dialog_info"
Android:title="Two"/>
<item
Android:id="@+id/action_three"
Android:icon="@Android:drawable/ic_dialog_email"
Android:title="Three"/>
<item
Android:id="@+id/action_four"
Android:icon="@Android:drawable/ic_popup_reminder"
Android:title="Four"/>
</menu>
Et vous pouvez définir la teinte et la couleur du texte comme liste de couleurs pour que l'élément actuellement sélectionné soit mis en surbrillance:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:color="@color/colorAccent"
Android:state_checked="false"/>
<item
Android:color="@Android:color/white"
Android:state_checked="true"/>
</selector>
Enfin, vous pouvez gérer la sélection des éléments avec un OnNavigationItemSelectedListener:
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()) {
case R.id.action_one:
// Switch to page one
break;
case R.id.action_two:
// Switch to page two
break;
case R.id.action_three:
// Switch to page three
break;
}
return true;
}
});
La réponse acceptée est bonne, mais j'ai trouvé l'organisation un peu difficile à suivre et une partie du contenu inutile. L'exemple complet suivant montre comment créer une barre de navigation inférieure similaire à l'image de la question.
Ajoutez cette ligne au fichier build.grade de votre application, à côté des autres éléments de la bibliothèque de support.
implementation 'com.Android.support:design:28.0.0'
Remplacez le numéro de version par tout ce qui est actuel.
La seule chose spéciale que nous avons ajoutée à la mise en page est la BottomNavigationView
. Pour changer la couleur de l'icône et du texte lorsque vous cliquez dessus, vous pouvez utiliser une variable selector
au lieu de spécifier directement la couleur. Ceci est omis pour des raisons de simplicité ici.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.design.widget.BottomNavigationView
Android:id="@+id/bottom_navigation"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
app:menu="@menu/bottom_nav_menu"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@Android:color/white"
app:itemTextColor="@Android:color/white" />
</RelativeLayout>
Notez que nous avons utilisé layout_alignParentBottom
pour le mettre en bas.
Le code XML ci-dessus pour la vue de navigation inférieure se réfère à bottom_nav_menu
. C’est ce qui définit chaque élément de notre point de vue. Nous allons le faire maintenant. Tout ce que vous avez à faire est ajoutez une ressource de menu comme vous le feriez pour une barre d’action ou une barre d’outils.
bottom_nav_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<item
Android:id="@+id/action_recents"
Android:enabled="true"
Android:icon="@drawable/ic_action_recents"
Android:title="Recents"
app:showAsAction="ifRoom" />
<item
Android:id="@+id/action_favorites"
Android:enabled="true"
Android:icon="@drawable/ic_action_favorites"
Android:title="Favorites"
app:showAsAction="ifRoom" />
<item
Android:id="@+id/action_nearby"
Android:enabled="true"
Android:icon="@drawable/ic_action_nearby"
Android:title="Nearby"
app:showAsAction="ifRoom" />
</menu>
Vous devrez ajouter les icônes appropriées à votre projet. Ce n'est pas très difficile si vous allez dans Fichier> Nouveau> Image Asset et choisissez Barre d'action et icônes de tabulation comme type d'icône.
Il n'y a rien de spécial qui se passe ici. Nous venons d'ajouter un auditeur à la barre de navigation inférieure dans la méthode onCreate
de notre activité.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_recents:
Toast.makeText(MainActivity.this, "Recents", Toast.LENGTH_SHORT).show();
break;
case R.id.action_favorites:
Toast.makeText(MainActivity.this, "Favorites", Toast.LENGTH_SHORT).show();
break;
case R.id.action_nearby:
Toast.makeText(MainActivity.this, "Nearby", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
}
}
J'ai appris comment faire cela en regardant la vidéo YouTube suivante. La voix de l'ordinateur est un peu étrange, mais la démonstration est très claire.
Autre bibliothèque alternative, vous pouvez essayer: - https://github.com/Ashok-Varma/BottomNavigation
<com.ashokvarma.bottomnavigation.BottomNavigationBar
Android:layout_gravity="bottom"
Android:id="@+id/bottom_navigation_bar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"/>
BottomNavigationBar bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
bottomNavigationBar
.addItem(new BottomNavigationItem(R.drawable.ic_home_white_24dp, "Home"))
.addItem(new BottomNavigationItem(R.drawable.ic_book_white_24dp, "Books"))
.addItem(new BottomNavigationItem(R.drawable.ic_music_note_white_24dp, "Music"))
.addItem(new BottomNavigationItem(R.drawable.ic_tv_white_24dp, "Movies & TV"))
.addItem(new BottomNavigationItem(R.drawable.ic_videogame_asset_white_24dp, "Games"))
.initialise();
j'ai créé une classe privée qui utilise un gridview et une ressource de menu:
private class BottomBar {
private GridView mGridView;
private Menu mMenu;
private BottomBarAdapter mBottomBarAdapter;
private View.OnClickListener mOnClickListener;
public BottomBar (@IdRes int gridviewId, @MenuRes int menuRes,View.OnClickListener onClickListener) {
this.mGridView = (GridView) findViewById(gridviewId);
this.mMenu = getMenu(menuRes);
this.mOnClickListener = onClickListener;
this.mBottomBarAdapter = new BottomBarAdapter();
this.mGridView.setAdapter(mBottomBarAdapter);
}
private Menu getMenu(@MenuRes int menuId) {
PopupMenu p = new PopupMenu(MainActivity.this,null);
Menu menu = p.getMenu();
getMenuInflater().inflate(menuId,menu);
return menu;
}
public GridView getGridView(){
return mGridView;
}
public void show() {
mGridView.setVisibility(View.VISIBLE);
mGridView.animate().translationY(0);
}
public void hide() {
mGridView.animate().translationY(mGridView.getHeight());
}
private class BottomBarAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public BottomBarAdapter(){
this.mInflater = LayoutInflater.from(MainActivity.this);
}
@Override
public int getCount() {
return mMenu.size();
}
@Override
public Object getItem(int i) {
return mMenu.getItem(i);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
MenuItem item = (MenuItem) getItem(i);
if (view==null){
view = mInflater.inflate(R.layout.your_item_layout,null);
view.setId(item.getItemId());
}
view.setOnClickListener(mOnClickListener);
view.findViewById(R.id.bottomnav_icon).setBackground(item.getIcon());
((TextView) view.findViewById(R.id.bottomnav_label)).setText(item.getTitle());
return view;
}
}
votre_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@+id/item1_id"
Android:icon="@drawable/ic_item1"
Android:title="@string/title_item1"/>
<item Android:id="@+id/item2_id"
Android:icon="@drawable/ic_item2"
Android:title="@string/title_item2"/>
...
</menu>
et un élément de disposition personnalisé your_item_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:layout_margin="16dp">
<ImageButton Android:id="@+id/bottomnav_icon"
Android:layout_width="24dp"
Android:layout_height="24dp"
Android:layout_gravity="top|center_horizontal"
Android:layout_marginTop="8dp"
Android:layout_marginBottom="4dp"/>
<TextView Android:id="@+id/bottomnav_label"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom|center_horizontal"
Android:layout_marginBottom="8dp"
Android:layout_marginTop="4dp"
style="@style/mystyle_label" />
</LinearLayout>
utilisation dans votre activité principale:
BottomBar bottomBar = new BottomBar(R.id.YourGridView,R.menu.your_menu, mOnClickListener);
et
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.item1_id:
//todo item1
break;
case R.id.item2_id:
//todo item2
break;
...
}
}
}
et dans layout_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.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:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true">
...
<FrameLayout Android:id="@+id/fragment_container"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<GridView Android:id="@+id/bottomNav"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/your_background_color"
Android:verticalSpacing="0dp"
Android:horizontalSpacing="0dp"
Android:numColumns="4"
Android:stretchMode="columnWidth"
app:layout_anchor="@id/fragment_container"
app:layout_anchorGravity="bottom"/>
</Android.support.design.widget.CoordinatorLayout>
Une nouvelle version de BottomNavigationView dans la version 25 de la bibliothèque de support de conception
https://developer.Android.com/reference/Android/support/design/widget/BottomNavigationView.html ajouter un niveau compile 'com.Android.support:design:25.0.0'
XML
<Android.support.design.widget.BottomNavigationView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:design="http://schema.Android.com/apk/res/Android.support.design"
Android:id="@+id/navigation"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_gravity="start"
design:menu="@menu/my_navigation_items" />
Je pense que cela est également utile.
Snippet
public class MainActivity : AppCompatActivity, BottomNavigationBar.Listeners.IOnTabSelectedListener
{
private BottomBar _bottomBar;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.MainActivity);
_bottomBar = BottomBar.Attach(this, bundle);
_bottomBar.SetItems(
new BottomBarTab(Resource.Drawable.ic_recents, "Recents"),
new BottomBarTab(Resource.Drawable.ic_favorites, "Favorites"),
new BottomBarTab(Resource.Drawable.ic_nearby, "Nearby")
);
_bottomBar.SetOnItemSelectedListener(this);
_bottomBar.HideShadow();
_bottomBar.UseDarkTheme(true);
_bottomBar.SetTypeFace("Roboto-Regular.ttf");
var badge = _bottomBar.MakeBadgeForTabAt(1, Color.ParseColor("#f02d4c"), 1);
badge.AutoShowAfterUnSelection = true;
}
public void OnItemSelected(int position)
{
}
protected override void OnSaveInstanceState(Bundle outState)
{
base.OnSaveInstanceState(outState);
// Necessary to restore the BottomBar's state, otherwise we would
// lose the current tab on orientation change.
_bottomBar.OnSaveInstanceState(outState);
}
}
Liens
https://github.com/pocheshire/BottomNavigationBar
C'est https://github.com/roughike/BottomBar porté en C # pour les développeurs Xamarin
Cette bibliothèque, BottomNavigationViewEx , étend la vue Google de BottomNavigationView. Vous pouvez facilement personnaliser la bibliothèque de Google pour avoir la barre de navigation inférieure comme vous le souhaitez. Vous pouvez désactiver le mode de décalage, modifier la visibilité des icônes et des textes, et bien plus encore. Certainement l'essayer.
<Android.support.design.widget.BottomNavigationView
Android:id="@+id/navigation"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="bottom"
Android:background="?android:attr/windowBackground"
app:menu="@menu/navigation" />
navigation.xml (dans le menu)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<item
Android:id="@+id/navigation_home"
Android:icon="@drawable/ic_home_black_24dp"
Android:title="@string/title_home"
app:showAsAction="always|withText"
Android:enabled="true"/>
Dans la méthode onCreate()
,
BottomNavigationView navigation = (BottomNavigationView)findViewById(R.id.navigation);
//Dont forgot this line
BottomNavigationViewHelper.disableShiftMode(navigation);
Et créer une classe comme ci-dessous.
public class BottomNavigationViewHelper {
public static void disableShiftMode(BottomNavigationView view) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");
shiftingMode.setAccessible(true);
shiftingMode.setBoolean(menuView, false);
shiftingMode.setAccessible(false);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
//noinspection RestrictedApi
item.setShiftingMode(false);
// set once again checked value, so view will be updated
//noinspection RestrictedApi
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e("BNVHelper", "Unable to get shift mode field", e);
} catch (IllegalAccessException e) {
Log.e("BNVHelper", "Unable to change value of shift mode", e);
}
}
}
J'ai référé ce github post et j'ai défini le three layouts
pour three fragment
pages dans la barre de tabulation inférieure.
FourButtonsActivity.Java:
bottomBar.setFragmentItems(getSupportFragmentManager(), R.id.fragmentContainer,
new BottomBarFragment(LibraryFragment.newInstance(R.layout.library_fragment_layout), R.drawable.ic_update_white_24dp, "Recents"),
new BottomBarFragment(PhotoEffectFragment.newInstance(R.layout.photo_effect_fragment), R.drawable.ic_local_dining_white_24dp, "Food"),
new BottomBarFragment(VideoFragment.newInstance(R.layout.video_layout), R.drawable.ic_favorite_white_24dp, "Favorites")
);
Pour définir le nombre de badges:
BottomBarBadge unreadMessages = bottomBar.makeBadgeForTabAt(1, "#E91E63", 4);
unreadMessages.show();
unreadMessages.setCount(4);
unreadMessages.setAnimationDuration(200);
unreadMessages.setAutoShowAfterUnSelection(true);
LibraryFragment.Java:
import Android.os.Bundle;
import Android.support.annotation.Nullable;
import Android.support.v4.app.Fragment;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
public class LibraryFragment extends Fragment {
private static final String STARTING_TEXT = "Four Buttons Bottom Navigation";
public LibraryFragment() {
}
public static LibraryFragment newInstance(int resource) {
Bundle args = new Bundle();
args.putInt(STARTING_TEXT, resource);
LibraryFragment sampleFragment = new LibraryFragment();
sampleFragment.setArguments(args);
return sampleFragment;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = LayoutInflater.from(getActivity()).inflate(
getArguments().getInt(STARTING_TEXT), null);
return view;
}