Android новая нижняя панель навигации или BottomNavigationView
увидел, что новая директива вышла и используется в google photos новейшие приложения.
Не знаю, как использовать новую нижнюю панель навигации.
Смотрите через новую поддержку lib, не нашел никаких зацепок.

Не могу найти ни одного официального образца.
Как использовать новую нижнюю панель? Не хочу делать никаких настроек.
13 ответов:
Я думаю, что вы могли бы искать это.
вот быстрый фрагмент, чтобы начать работу:
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); } }вот ссылка.
https://github.com/roughike/BottomBar
редактировать новые версии.
вид нижней навигации был в руководстве по дизайну материалов в течение некоторого времени, но нам было нелегко реализовать его в наших приложениях. Некоторые приложения создали свои собственные решения, в то время как другие полагались на сторонние библиотеки с открытым исходным кодом для выполнения этой работы. Теперь библиотека поддержки дизайна видит добавление этой нижней панели навигации, давайте погрузимся в то, как мы можем ее использовать!
как использовать ?
Для начала нам нужно обновить нашу зависимость!
compile ‘com.android.support:design:25.0.0’дизайн 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>создать меню в соответствии с вашим требование.
<?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>обработка включено / отключено. Сделать селекторный файл.
<?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>обрабатывать события щелчка.
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; } });если вы хотите узнать больше о его методах и как это работает читать это.
конечно, это поможет вам.
вы должны использовать BottomNavigationView из библиотеки поддержки Android v25. Он представляет собой стандартную нижнюю панель навигации для приложения.
вот сообщение на носителе, который имеет пошаговое руководство: https://medium.com/@hitherejoe/exploring-the-android-design-support-library-bottom-navigation-drawer-548de699e8e0#.9vmiekxze
вы также можете использовать макет вкладки с пользовательским видом вкладки для достижения этой цели.
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]; } } }
Google запустил BottomNavigationView после версии 25.0.0 библиотеки поддержки дизайна. Но он пришел со следующими ограничениями:
- вы не можете удалить заголовки и значок центра.
- вы не можете изменить размер текста заголовков.
- вы не можете изменить цвет фона всегда colorPrimary.
- у него нет BottomNavigationBehavior: поэтому нет интеграции с FAB или SnackBar через CordinatorLayout.
- каждый menuItem является чистым расширением FrameLayout, поэтому он не имеет никакого хорошего эффекта раскрытия круга
таким образом, максимум, что вы можете сделать с этой первой версией BottomNavigationView, это: (без какого-либо отражения или реализации lib by сам.)
Итак, если вы хотите любой из этих. Вы можете использовать третью часть библиотеки, как roughike / BottomBar или реализовать lib самостоятельно.
Как упоминалось в Sanf0rd, Google запустил BottomNavigationView как часть библиотеки поддержки дизайна версии 25.0.0. Ограничений он упомянул в основном верно, за исключением того, что вы можете изменить цвет фона и цвет текста и цвет значка оттенок. Он также имеет анимацию при добавлении более 4 элементов (к сожалению, он не может быть включен или выключен вручную).
Я написал подробный учебник с примерами и сопровождающий репозиторий, который вы можете прочитать здесь: https://blog.autsoft.hu/now-you-can-use-the-bottom-navigation-view-in-the-design-support-library/
суть
вы должны добавить их в свой уровень приложения
build.gradle:compile 'com.android.support:appcompat-v7:25.0.0' compile 'com.android.support:design:25.0.0'вы можете включить его в свой макет, как это:
<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" />вы можете указать элементы через ресурс меню следующим образом:
<?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>и вы можете установить оттенок и цвет текста в виде списка цветов, поэтому выбранный в данный момент элемент подсвечивается:
<?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>наконец, вы можете обрабатывать выбор элементов с помощью 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; } });
другая альтернативная библиотека вы можете попробовать : -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();
как добавить нижнюю панель навигации
принятый ответ хорош, но я нашел организацию немного трудно следовать и некоторые из содержания ненужных. В следующем полном примере показано, как сделать нижнюю панель навигации похожей на изображение в вопросе.
добавить библиотеку поддержки дизайна
добавьте эту строку в свое приложение построить.класс файл рядом с другой поддержкой библиотечные вещи.
implementation 'com.android.support:design:26.1.0'замените номер версии на то, что является текущим. Используйте
compileвместоimplementationесли вы все еще используете Android Studio 2.x.создать макет активности
единственная специальная вещь, которую мы добавили в макет-это
BottomNavigationView. Чтобы изменить цвет значка и текста при нажатии на него, вы можете использоватьselectorвместо указания цвета напрямую. Это опущено для простоты здесь.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>обратите внимание, что мы использовали
layout_alignParentBottomна самом деле положил его на дно.определите пункты меню
xml выше для Нижнего вида навигации, указанного в
bottom_nav_menu. Это то, что определяет каждый элемент в нашем представлении. Мы сделаем это сейчас. Все, что вам нужно сделать, это добавить ресурс меню так же, как вы бы для панели действий или Панель инструментов.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>вам нужно будет добавить соответствующие значки в свой проект. Это не очень сложно, если вы идете к File > New > Image Asset и выбрать значки панели действий и вкладок как тип значка.
добавить элемент выбранного слушателя
там ничего особенного не происходит. Мы просто добавляем слушателя в нижнюю панель навигации в нашей деятельности
onCreateметод.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; } }); } }нужна помощь?
я узнал, как это сделать, просматривая следующее видео на YouTube. Компьютерный голос немного странный, но демонстрация очень ясно.
Я сделал частный класс, который использует gridview и ресурс меню:
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; } }your_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>и пользовательский элемент макета 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>использование внутри вашего mainactivity:
BottomBar bottomBar = new BottomBar(R.id.YourGridView,R.menu.your_menu, mOnClickListener);и
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; ... } } }и в 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>
Я думаю, что это также будет полезно.
фрагмент
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); } }ссылки
https://github.com/pocheshire/BottomNavigationBar
это https://github.com/roughike/BottomBar портирован на C# для разработчиков Xamarin
есть новый чиновник BottomNavigationView в версии 25 библиотеки поддержки проектирования
https://developer.android.com/reference/android/support/design/widget/BottomNavigationView.html добавить в gradle
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" />
Я сослался на это GitHub в должности и я поставил
three layoutsнаthree fragmentстраницы в нижней панели вкладок.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") );чтобы установить количество значков:
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; }
<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" />навигация.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/navigation_home" android:icon="@drawable/ic_home_black_24dp" android:title="@string/title_home" app:showAsAction="always|withText" android:enabled="true"/>внутри
onCreate()методBottomNavigationView navigation = (BottomNavigationView)findViewById(R.id.navigation); //Dont forgot this line BottomNavigationViewHelper.disableShiftMode(navigation);и создать класс, как показано ниже.
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); } } }
библиотеки BottomNavigationViewEx, расширяет BottomNavigationView Google. Вы можете легко настроить библиотеку Google, чтобы иметь нижнюю панель навигации так, как вы хотите. Вы можете отключить режим сдвига, изменить видимость значков и текстов и многое другое. Определенно попробуйте его.


Comments