2017-01-18 19 views
20

Я использую BottomNavigationView с помощью Android Support Desing Library 25. Но когда я переключаю вкладки, заголовок другой вкладки скрывается. Но нет скрытого вопроса о фактическом представлении нижней навигации. Но моя скрывается.BottomNavigationView с более чем 3-мя элементами: заголовок заголовка скрывается

MyBottomNavigation

Но я хочу к нему в таком виде. Любая идея сделать это? Что мне не хватает?

ActualBottomNavigation

Вот мой код:

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.example.yunus.ototakip.MainActivity"> 

<FrameLayout 
    android:id="@+id/main_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/bottom_navigation" 
    android:layout_alignParentTop="true"> 
</FrameLayout> 

<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/beyaz" 
    app:itemTextColor="@color/beyaz" 
    app:menu="@menu/bottombar_menu" /> 

bottom_bar_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 
<item 
android:id="@+id/bb_menu_arac" 
android:enabled="true" 
android:icon="@drawable/icon_car" 
android:title="@string/araclarim" 
app:showAsAction="ifRoom" /> 
<item 
android:id="@+id/bb_menu_yakin" 
android:enabled="true" 
android:icon="@drawable/icon_yer" 
android:title="@string/yakinimdakiler" 
app:showAsAction="ifRoom" /> 
    <item 
android:id="@+id/bb_menu_yaklasan" 
android:enabled="true" 
android:icon="@drawable/icon_takvim" 
android:title="@string/yaklasanlar" 
app:showAsAction="ifRoom" /> 

<item 
    android:id="@+id/bb_menu_ipucu" 
    android:enabled="true" 
    android:icon="@drawable/icon_ipucu" 
    android:title="@string/ipuclari" 
    app:showAsAction="ifRoom" /> 
</menu> 
+0

Вы попробовали приложение: showAsAction = "always' вместо' ifRoom' –

+0

Я пробовал, но он все еще скрывается –

+1

здесь http://stackoverflow.com/questions/36032177/android-new-bottom-navigation- bar –

ответ

39

попробовать это:

в вашем bottom_bar_menu.xml .Кнопкой атрибут showAsAction

<item android:id="@id/menu_item" 
android:title="text" 
android:icon="@drawable/drawable_resource_name" 
android:showAsAction="always|withText" /> 

в build.gradle:

compile 'com.android.support:design:25.3.1' 

НИЖНИЙ NAVIGATIONVIEW БОЛЕЕ 3 ДЕТАЛЕЙ: использовать removeShiftMode() метод

в BottomNavigationViewHelper.java Использование:

import android.annotation.SuppressLint; 
import android.support.design.internal.BottomNavigationItemView; 
import android.support.design.internal.BottomNavigationMenuView; 
import android.support.design.widget.BottomNavigationView; 
import java.lang.reflect.Field; 

    public class BottomNavigationViewHelper { 
     @SuppressLint("RestrictedApi") 
     public static void removeShiftMode(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("BottomNav", "Unable to get shift mode field", e); 
      } catch (IllegalAccessException e) { 
       Log.e("BottomNav", "Unable to change value of shift mode", e); 
      } 
     } 
    } 

Вызов его с помощью:

BottomNavigationView bottomNavigationView = (BottomNavigationView)findViewById(R.id.bottom_navigation); 
BottomNavigationViewHelper.removeShiftMode(bottomNavigationView); 

Это отключит сдвиг анимации текста заголовка и включить текст, который будет отображаться.

Вот Good Read

+1

Нет, он по-прежнему скрывается. Я пробовал «всегда» и «всегда | сText» –

+0

Я сделал это представление с этого сайта. https: //medium.c om/@hitherejoe/exploring-the-android-design-support-library-bottom-navigation-drawer-548de699e8e0#.bxrtprn0k –

+0

can u try 'android: showAsAction =" ifRoom | withText "' – rafsanahmad007

8

После проверки исходного кода BottomNavigationView я нахожу

mShiftingMode = mMenu.size() > 3; 

в BottomNavigationMenuView.java линии 265, это означает, что в то время как размер меню более 3, заголовок вкладки WIIL утаиться , Итак, если вы хотите показать название вкладки, вам просто нужно получить код из сборки и изменить ниже.

mShiftingMode = mMenu.size() > 5; 

PS: BottonNavigationView максимальное количество вкладок счетчика должно составлять от 3 до 5. Вы можете получить код на BottomNavigationViewNew enter image description here

+0

ничего себе, это было гладко. Спасибо за руководство комментарием. –

+0

У меня есть собственный CustomBottomView, который расширяет BottomNavigationView, есть ли способ установить это свойство? – JPM

+0

Я не вижу строку «BottomNavigationMenuView», которая имеет ограничение на 3 вкладки. Может быть, код изменился? –

3

Создание класса BottomNavigationViewHelper

import android.annotation.SuppressLint; 
import android.support.design.internal.BottomNavigationItemView; 
import android.support.design.internal.BottomNavigationMenuView; 
import android.support.design.widget.BottomNavigationView; 
import android.util.Log; 
import java.lang.reflect.Field; 
public class BottomNavigationViewHelper { 
    @SuppressLint("RestrictedApi") 
    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); 
if(menuView.getChildCount()<6) 
      { 
      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); 
     } 
    } 
} 

Вызов BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById (R.id.bottom_navigation); BottomNavigationViewHelper.disableShiftMode (bottomNavigationView);

+1

У этого есть SuppressLint, который разрешает проблему аннулирования restrictAPI – code4j

+0

Это решение работает –

 Смежные вопросы

  • Нет связанных вопросов^_^