디자인 지원 라이브러리 버전 25에서 android.support.design.widget.BottomNavigationView를 사용하고 있습니다.
compile 'com.android.support:design:25.0.0'
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottomBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="center"
app:itemBackground="@color/colorPrimary"
app:menu="@menu/bottom_navigation_main"
android:forceHasOverlappingRendering="true"/>
@ menu / bottom_navigation_main에 작업이 세 개 뿐인 경우 항상 아이콘과 텍스트 레이블을 모두 표시합니다.
3 개 이상의 작업이있을 때 항상 아이콘과 텍스트 레이블을 모두 표시하는 방법은 무엇입니까?
답변
여전히 솔루션을 찾고 있고 타사 라이브러리 또는 런타임 리플렉션에 의존하고 싶지 않은 사용자를 위해 Support Library 28 / Jetpack의 BottomNavigationView는 기본적으로 항상 텍스트 레이블이있는 것을 지원합니다.
이것이 당신이 찾고있는 방법입니다.
또는 XML에서 app:labelVisibilityMode="labeled"
답변
2018 년 5 월 8 일 업데이트
당신은 app:labelVisibilityMode="labeled"
에서 직접 사용할 수 있습니다
<android.support.design.widget.BottomNavigationView />
이 긴 솔루션이 필요하지 않습니다.
이전 답변
BottomNavigationView에서 이상한 동작이있었습니다. 항목 / 조각을 선택했을 때 조각이 BottomNavigationView를 조금 더 낮게 밀기 때문에 BottomNavigationView의 텍스트가 화면 아래로 이동하므로 아이콘 만 표시되고 항목을 클릭하면 텍스트가 숨겨집니다.
그 이상한 행동에 직면했다면 여기에 해결책이 있습니다. 그냥 제거
android:fitsSystemWindows="true"
조각의 루트 레이아웃에서. 이것을 제거하고 붐! BottomNavigationView가 제대로 작동하므로 이제 텍스트와 아이콘으로 표시 할 수 있습니다. 나는 이것을 조각의 루트 CoordinatorLayout에 가지고 있습니다.
또한 추가하는 것을 잊지 마십시오
BottomNavigationViewHelper.removeShiftMode(bottomNavigationView);
활동에서 변속 모드를 비활성화하십시오.
그 수업은 다음과 같습니다.
public class BottomNavigationViewHelper {
@SuppressLint("RestrictedApi")
public static void removeShiftMode(BottomNavigationView view) {
//this will remove shift mode for bottom navigation 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);
item.setShiftingMode(false);
// set once again checked value, so view will be updated
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e("ERROR NO SUCH FIELD", "Unable to get shift mode field");
} catch (IllegalAccessException e) {
Log.e("ERROR ILLEGAL ALG", "Unable to change value of shift mode");
}
}
}
답변
버전 25에서는 어렵습니다.
이 코드를 사용해보십시오. 하지만 좋은 해결책이 아니라고 생각합니다.
BottomNavigationView navigationView = (BottomNavigationView) findViewById(R.id.bottomBar);
BottomNavigationMenuView menuView = (BottomNavigationMenuView) navigationView.getChildAt(0);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView itemView = (BottomNavigationItemView) menuView.getChildAt(i);
itemView.setShiftingMode(false);
itemView.setChecked(false);
}
답변
다음은 @STAR_ZERO와 @ KishanSolanki124의 솔루션을 결합한 Kotlin 확장 기능입니다.
fun BottomNavigationView.disableShiftMode() {
val menuView = getChildAt(0) as BottomNavigationMenuView
menuView.javaClass.getDeclaredField("mShiftingMode").apply {
isAccessible = true
setBoolean(menuView, false)
isAccessible = false
}
@SuppressLint("RestrictedApi")
for (i in 0 until menuView.childCount) {
(menuView.getChildAt(i) as BottomNavigationItemView).apply {
setShiftingMode(false)
setChecked(false)
}
}
}
그것을 사용하려면 :
myBottomNavigation.disableShiftMode()
답변
답변
BottomNevigationView에 텍스트와 아이콘을 모두 표시하는 데 사용할 수 있습니다.
app:labelVisibilityMode="labeled"
이것을 사용하는 경우 아이콘과 텍스트를 모두 볼 수 있습니다
<android.support.design.widget.BottomNavigationView
app:labelVisibilityMode="labeled"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/bottom_navigation_view"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_navigation_menu"/>
답변
app : labelVisibilityMode = “labeled”를 직접 사용할 수 있습니다.
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="50dp"
app:labelVisibilityMode="labeled"
android:elevation="8dp"
android:layout_alignParentBottom="true"
app:itemBackground="@drawable/bottom_navi"
app:itemTextColor="@color/white"
app:itemIconTint="@color/white"
app:menu="@menu/bottom_nav_menu_managment" />