O uso da barra de navegação inferior do Android BottomNavigationView
Uso básico
Importe dependências primeiro (aqui, pegue o AndroidX como exemplo)
implementation 'com.google.android.material:material:1.0.0'
Use no layout
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="@color/white"
app:itemBackground="@null"
app:itemTextColor="@drawable/sl_tab_color"
app:labelVisibilityMode="labeled"
app:layout_constraintBottom_toBottomOf="parent"
app:menu="@menu/navigation_item" />
Onde app: itemTextColor = "@ drawable / sl_tab_color" é a seleção de cor da fonte quando o botão é selecionado e não selecionado. O arquivo navigation_item.xml é:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_main"
android:icon="@drawable/sl_tab_main_main"
android:title="@string/menu_main"/>
<item
android:id="@+id/menu_project"
android:icon="@drawable/sl_tab_main_project"
android:title="@string/menu_project"/>
<item
android:id="@+id/menu_wechat"
android:icon="@drawable/sl_tab_main_wechat"
android:title="@string/menu_wechat"/>
<item
android:id="@+id/menu_system"
android:icon="@drawable/sl_tab_main_system"
android:title="@string/menu_system"/>
</menu>
Entre eles, android: icon = "@ drawable / sl_tab_main_system" é a seleção do ícone quando o botão de configuração é selecionado e desmarcado.
Efeito de exibição:
Nota:
Existe o seguinte trecho de código no código-fonte de BottomNavigationView
public int getMaxItemCount() {
return 5;
}
Então, quando o número de itens que adicionamos no arquivo de menu for maior que 5, um erro será relatado
Exibição de efeito comum
1. Remova o efeito de fundo ondulado da água que aparece quando você clica
app:itemBackground="@null"
2. Remova o efeito de animação e deslocamento ao clicar
app:labelVisibilityMode="labeled"
Os valores dos atributos são rotulados, não rotulados, selecionados e
rotulados automaticamente : ícones e rótulos são exibidos em todos os botões.
sem rótulo: nenhum rótulo é exibido em todos os botões, apenas ícones são exibidos.
selecionado: apenas o botão selecionado exibe o rótulo e o ícone, e o outro não selecionado exibe apenas o ícone.
auto: modo automático, este modo usa o número de itens para determinar se deve mostrar ou ocultar o rótulo. O modo rotulado é usado quando o número de botões é menor ou igual a 3, e o modo selecionado é usado quando há mais de 3 botões.
Este método só pode ser usado quando a API usada atualmente é maior que 28. Quando api é menor que 28, o seguinte método pode ser usado:
@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);
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
item.setShiftingMode(false);
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e( "TAG","Unable to get shift mode field");
} catch (IllegalAccessException e) {
Log.e( "TAG","Unable to change value of shift mode");
}
}
3. Remova a modificação de cor padrão do ícone quando clicado
bottomNavigationView.itemIconTintList = null
4. Modifique o tamanho do texto
Adicione no arquivo de recurso dimens.xml
<dimen name="design_bottom_navigation_active_text_size" tools:override="true">12sp</dimen>
<dimen name="design_bottom_navigation_text_size" tools:override="true">12sp</dimen>
Uso na atividade
bottomNavigationView.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.menu_main -> {
//todo
}
R.id.menu_project -> {
//todo
}
R.id.menu_system -> {
//todo
}
R.id.menu_wechat -> {
//todo
}
}
true
}
Se você precisar obter informações sobre um botão específico, pode chamar o seguinte código
Atualizando continuamente ...
Endereço de aprendizado de referência do artigo: https://www.jianshu.com/p/d5fb8ff21b4f