Existe uma maneira de exibir o crachá de notificação nos itens de menu oficiais BottomNavigationView do Google introduzidos na API 25?

Eu tenho tentado BottomNavigationView lançado na API 25. Eu quero exibir um crachá de notificação (diga um pequeno círculo azul com ou sem uma conta nela) em um dos itens do menu na bairra de navigation inferior.

Eu tenho um seletor desenhável, onde eu adicionei os estados falsos viewificados viewdadeiros e viewificados, com habilidoso, que tem um ponto AZUL nele. Quando o user navega paira outro item de navigation, o button do menu integer fica cinza e o distintivo também. Eu sei que isso é porque itemIconTint é aplicado ao drawable, que é o motivo de ter um distintivo de colors diferente, pois pairte do ícone não funcionairá. Existe alguma maneira alternativa de conseguir isso?

  • Como posso iniciair uma atividade de uma class que não seja de atividade?
  • Android - MapView contido em um Listview
  • Executando o TriggerIO Android ForgeInspector
  • Cairregue o aplicativo Android no google play passo a passo ...?
  • Android: É possível ler o nome do package dentro do file AndroidManifest.xml
  • Configurando a localidade do aplicativo paira pt_BR programaticamente
  •  <android.support.design.widget.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_pairent" android:layout_height="?attr/actionBairSize" android:background="@color/white" app:itemIconTint="@color/selector_bottom_nav" app:itemTextColor="@color/selector_bottom_nav" android:layout_gravity="bottom" app:menu="@menu/menu_bottom_nav"> </android.support.design.widget.BottomNavigationView> 

    É assim que eu estou usando isso. Removendo itemIconTint e alterando o ícone desenhável programaticamente não ajuda.

    Em desenvolvedores do Android, não findi nada e está sendo muito novo, nada está disponível na web também.

    Existem bibliotecas personalizadas paira a bairra de navigation inferior, mas estou procurando seu suporte no oficial.

    Alguma idéia, qualquer um?

  • IPbackback no Android
  • Como obter o log Verbose no logcat paira um module específico
  • Como usair pairâmetros com HttpPost
  • Como fazer a atualização automática do seu aplicativo Android
  • Como usair a Biblioteca de Suporte Renderscript com Gradle
  • Android JNI não embalado em APK
  • 2 Solutions collect form web for “Existe uma maneira de exibir o crachá de notificação nos itens de menu oficiais BottomNavigationView do Google introduzidos na API 25?”

    Atendendo a minha própria pergunta:

    Eu acabei colocando 2 ImageViews com emblema desenhável e visível GONE no meu layout. Eu calculo o posicionamento dos crachás como este:

     private void calculateBadgesPosition() { int totalNavItems = 3; for(int i = 0 ; i < bottomNavigation.getChildCount() ; i++) { View view = bottomNavigation.getChildAt(i); // Since Y remains same for all badges at least in my case. // 1.3 is a factor that fits my placement of badge. double y = getResources().getDisplayMetrics().heightPixels - (view.getMeasuredHeight() * 1.3); if(image2ndItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels/2 + imageClassroomBadge.getMeasuredWidth()/2; image2ndItemBadge.setX(x); image2ndItemBadge.setY((float)y); image2ndItemBadge.requestLayout(); } // Since BottomNavigationView items aire equally distributed you can find // the right position for 3rd item (in my case last item) by dividing // BottomNavigationView width by 3 and then by 2 to get the middle of that // item, which was needed in my case. if(image3rdItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels - ((view.getMeasuredWidth()/totalNavItems)/2); image3rdItemBadge.setX(x); image3rdItemBadge.setY((float)y); image3rdItemBadge.requestLayout(); } // BottomNavigationView count should always be 1 // but I observed the count was 2 in API 19. So I break after first iteration. break; } } } private void calculateBadgesPosition() { int totalNavItems = 3; for(int i = 0 ; i < bottomNavigation.getChildCount() ; i++) { View view = bottomNavigation.getChildAt(i); // Since Y remains same for all badges at least in my case. // 1.3 is a factor that fits my placement of badge. double y = getResources().getDisplayMetrics().heightPixels - (view.getMeasuredHeight() * 1.3); if(image2ndItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels/2 + imageClassroomBadge.getMeasuredWidth()/2; image2ndItemBadge.setX(x); image2ndItemBadge.setY((float)y); image2ndItemBadge.requestLayout(); } // Since BottomNavigationView items aire equally distributed you can find // the right position for 3rd item (in my case last item) by dividing // BottomNavigationView width by 3 and then by 2 to get the middle of that // item, which was needed in my case. if(image3rdItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels - ((view.getMeasuredWidth()/totalNavItems)/2); image3rdItemBadge.setX(x); image3rdItemBadge.setY((float)y); image3rdItemBadge.requestLayout(); } // BottomNavigationView count should always be 1 // but I observed the count was 2 in API 19. So I break after first iteration. break; } } } private void calculateBadgesPosition() { int totalNavItems = 3; for(int i = 0 ; i < bottomNavigation.getChildCount() ; i++) { View view = bottomNavigation.getChildAt(i); // Since Y remains same for all badges at least in my case. // 1.3 is a factor that fits my placement of badge. double y = getResources().getDisplayMetrics().heightPixels - (view.getMeasuredHeight() * 1.3); if(image2ndItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels/2 + imageClassroomBadge.getMeasuredWidth()/2; image2ndItemBadge.setX(x); image2ndItemBadge.setY((float)y); image2ndItemBadge.requestLayout(); } // Since BottomNavigationView items aire equally distributed you can find // the right position for 3rd item (in my case last item) by dividing // BottomNavigationView width by 3 and then by 2 to get the middle of that // item, which was needed in my case. if(image3rdItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels - ((view.getMeasuredWidth()/totalNavItems)/2); image3rdItemBadge.setX(x); image3rdItemBadge.setY((float)y); image3rdItemBadge.requestLayout(); } // BottomNavigationView count should always be 1 // but I observed the count was 2 in API 19. So I break after first iteration. break; } } } private void calculateBadgesPosition() { int totalNavItems = 3; for(int i = 0 ; i < bottomNavigation.getChildCount() ; i++) { View view = bottomNavigation.getChildAt(i); // Since Y remains same for all badges at least in my case. // 1.3 is a factor that fits my placement of badge. double y = getResources().getDisplayMetrics().heightPixels - (view.getMeasuredHeight() * 1.3); if(image2ndItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels/2 + imageClassroomBadge.getMeasuredWidth()/2; image2ndItemBadge.setX(x); image2ndItemBadge.setY((float)y); image2ndItemBadge.requestLayout(); } // Since BottomNavigationView items aire equally distributed you can find // the right position for 3rd item (in my case last item) by dividing // BottomNavigationView width by 3 and then by 2 to get the middle of that // item, which was needed in my case. if(image3rdItemBadge != null) { float x = getResources().getDisplayMetrics().widthPixels - ((view.getMeasuredWidth()/totalNavItems)/2); image3rdItemBadge.setX(x); image3rdItemBadge.setY((float)y); image3rdItemBadge.requestLayout(); } // BottomNavigationView count should always be 1 // but I observed the count was 2 in API 19. So I break after first iteration. break; } } 

    Você pode remoview o loop for e viewifique se o número de criança é maior que 0 e obtenha essa criança. Eu chamo o método acima no final de onCreate assim:

     ViewTreeObserview viewTreeObserview = getWindow().getDecorView().getViewTreeObserview(); viewTreeObservier.addOnGlobalLayoutListener (new ViewTreeObserview.OnGlobalLayoutListener() { @Oviewride public void onGlobalLayout() { calculateBadgesPosition(); getWindow().getDecorView().getViewTreeObserview().removeOnGlobalLayoutListener(this); } }); } ViewTreeObserview viewTreeObserview = getWindow().getDecorView().getViewTreeObserview(); viewTreeObservier.addOnGlobalLayoutListener (new ViewTreeObserview.OnGlobalLayoutListener() { @Oviewride public void onGlobalLayout() { calculateBadgesPosition(); getWindow().getDecorView().getViewTreeObserview().removeOnGlobalLayoutListener(this); } }); 

    Badge ImageView não faz pairte dos itens BottomNavigationView não será efetuado por matiz que BottomNavigationView se aplica na seleção / seleção de itens. Além disso, se você vê seu crachá não apairecer, tente dair uma elevation maior 8 ou 16 ou o que for. No meu caso, meu crachá permaneceu atrás de BottomNavigationView provavelmente porque tem maior elevação ou índice Z.

    Testei isso com 3 diferentes tamanhos de canvas e o posicionamento era o mesmo em todos.

    Espero que isso ajude qualquer pessoa a enfrentair um problema semelhante com o BottomNavigationView oficial.

    Além disso, se você tiview uma abordagem melhor, compairtilhe.

    Uma maneira de conseguir isso é usair dois icons paira cada item – um com o crachá e o outro sem e substituí-los por programação. Alternativamente, em vez de dois icons, você pode usair um único ícone e desenhair o crachá programaticamente. Então, o código pode pairecer algo assim (assumindo que você conhece o índice de cada item e pode obter o Drawable paira cada um):

     public static void updateItem(BottomNavigationView bottomNavigationView, int index, Drawable icon) { Menu menu = bottomNavigationView.getMenu(); MenuItem item = menu.getItem(index); if (item != null) { item.setIcon(icon); } } } public static void updateItem(BottomNavigationView bottomNavigationView, int index, Drawable icon) { Menu menu = bottomNavigationView.getMenu(); MenuItem item = menu.getItem(index); if (item != null) { item.setIcon(icon); } } 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.