하단 탐색 보기 아이콘과 텍스트 레이블을 항상 표시합니다.
안드로이드를 사용하고 있습니다.서포트.디자인.위젯설계 지원 라이브러리 버전 25에서 아래쪽 탐색보기
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에 세 가지 작업만 있는 경우 아이콘과 텍스트 레이블이 항상 표시됩니다.
작업이 세 개 이상일 때 항상 아이콘과 텍스트 레이블을 모두 표시하는 방법은 무엇입니까?
타사 라이브러리나 런타임 반영에 의존하고 싶지 않은 솔루션을 여전히 찾고 있는 사용자를 위해 Support Library 28/Jetpack의 BottomNavigationView는 기본적으로 항상 텍스트 레이블을 사용할 수 있도록 지원합니다.
이것이 당신이 찾고 있는 방법입니다.
또는 XML에서,app:labelVisibilityMode="labeled"
2018년 5월 8일부터 업데이트
사용할 수 있습니다.app:labelVisibilityMode="labeled"
직접적으로<android.support.design.widget.BottomNavigationView />
출처: https://developer.android.com/reference/com/google/android/material/bottomnavigation/LabelVisibilityMode
아래의 긴 솔루션은 필요하지 않습니다.
이전 답변
Bottom Navigation View에서 이상한 동작이 발생했습니다.항목/조각을 선택할 때 조각이 BottomNavigationView를 약간 낮게 밀어 BottomNavigationView의 텍스트가 화면 아래로 이동하여 아이콘만 표시되고 항목 클릭 시 텍스트가 숨겨집니다.
만약 여러분이 그 이상한 행동에 직면한다면, 여기 해결책이 있습니다.제거하기만 하면 됩니다.
android:fitsSystemWindows="true"
조각의 루트 레이아웃에 있습니다.이거 빼고 쾅!BottomNavigationView(아래쪽 탐색 보기)는 잘 작동합니다. 이제 텍스트와 아이콘으로 표시할 수 있습니다.이것은 제 루트 코디네이터 레이아웃 조각에 있습니다.
또한 추가하는 것도 잊지 마십시오.
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);
}
BottomNavigationView에서 텍스트와 아이콘을 모두 표시하는 데 사용할 수 있습니다.
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"/>
이런 취지로 하시겠습니까?
그렇다면 BottomNavigationViewEx를 사용해 보는 것이 좋습니다.
@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()
app:labelVisibilityMode="라벨"을 직접 사용할 수 있습니다.
<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" />
BottomNavigationView 클래스에는 BottomNavigationMenuView 필드가 있고 BottomNavigationMenuView에는 BottomNavigation이 있습니다.ItemView[] 필드 - 아래쪽 막대의 항목입니다.
say n은 항목 수이며, BottomNavigationMenuView에서 BottomNavigation을 호출합니다.항목 보기.Bottom Navigation의 각 멤버에 Shifting Mode(n>3)를 설정합니다.ItemView[] 배열입니다.이 기능은 동작을 결정합니다(항상 또는 선택 시에만 제목 표시).
따라서 제목을 항상 표시하는 방법은 이 메서드를 호출하는 것이며 반사를 사용하여 개인 필드에 액세스할 수 있습니다.
BottomNavigationView bottomNavigationView= (BottomNavigationView) findViewById(R.id.bottom_navigation);
// get the private BottomNavigationMenuView field
Field f = null;
try {
f = bottomNavigationView.getClass().getDeclaredField("mMenuView");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
f.setAccessible(true);
BottomNavigationMenuView menuView=null;
try {
menuView = (BottomNavigationMenuView) f.get(bottomNavigationView);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// get the private BottomNavigationItemView[] field
try {
f=menuView.getClass().getDeclaredField("mButtons");
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
f.setAccessible(true);
BottomNavigationItemView[] mButtons=null;
try {
mButtons = (BottomNavigationItemView[]) f.get(menuView);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
for(int i=0;i<mButtons.length;i++){
mButtons[i].setShiftingMode(false);
mButtons[i].setChecked(true);
}
제목을 끝까지 보여줍니다.다음 코틀린 코드를 사용해 보십시오.
@SuppressLint("RestrictedApi")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_ofree)
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
val menuView = navigation.getChildAt(0) as BottomNavigationMenuView
for (i in 0 until menuView.childCount) {
val itemView = menuView.getChildAt(i) as BottomNavigationItemView
itemView.setShiftingMode(false)
itemView.setChecked(false)
}
}
아래쪽 탐색 보기에 대한 대안예: 아래쪽 막대
항상 레이블을 표시하는 프로그래밍 방식
navigationView.labelVisibilityMode = NavigationBarView.LABEL_VISIBILITY_LABELED
언급URL : https://stackoverflow.com/questions/40396545/bottomnavigationview-display-both-icons-and-text-labels-at-all-times
'programing' 카테고리의 다른 글
윈도우즈 파워셸로 숨겨진 파일(도트 파일)을 표시하는 방법 (0) | 2023.08.19 |
---|---|
Powershell을 사용하여 상위 스코프 변수를 수정하는 방법 (0) | 2023.08.19 |
PowerShell Where-Object 문에 다중 및/또는 포함됨 (0) | 2023.08.19 |
Listview 목록 업데이트 후 목록 끝으로 스크롤 (0) | 2023.08.19 |
UIButton 하위 클래스를 시작하려면 어떻게 해야 합니까? (0) | 2023.08.19 |