簡體   English   中英

如何在 NavigationView 中的項目上添加徽章

[英]How to add badge on item in NavigationView

我剛開始使用新組件 android.support.design.widget.NavigationView,在此之前我使用標准列表視圖導航抽屜,但現在我開始使用新組件導航視圖並且在項目上實現徽章時遇到問題。 現在有人如何解決這個問題嗎?

這可以通過以下步驟完成

1.在導航抽屜菜單中添加“actionViewClass”屬性

在使用導航抽屜創建“Helloworld”應用程序后,在項目層次結構視圖的“菜單”文件夾下查找文件“activity_main_drawer.xml”(即youractivityname_drawer.xml)。 識別組項並添加“app:actionViewClass = android.widget.TextView”,如下所示:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/nav_camera"
        android:icon="@drawable/ic_menu_camera"
        android:title="Import" />
    <item
        android:id="@+id/nav_gallery"
        app:actionViewClass="android.widget.TextView"
        android:icon="@drawable/ic_menu_gallery"
        android:title="Gallery" />
    <item
        android:id="@+id/nav_slideshow"
        app:actionViewClass="android.widget.TextView"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="Slideshow" />
    <item
        android:id="@+id/nav_manage"
        android:icon="@drawable/ic_menu_manage"
        android:title="Tools" />
</group>

2.聲明導航抽屜菜單項並使用徽章值初始化項目。

在您的主Activity中,聲明導航抽屜的菜單項,如下所示

//Create these objects above OnCreate()of your main activity
TextView slideshow,gallery;

//These lines should be added in the OnCreate() of your main activity
gallery=(TextView) MenuItemCompat.getActionView(navigationView.getMenu().findItem(R.id.nav_gallery));
slideshow=(TextView) MenuItemCompat.getActionView(navigationView.getMenu().findItem(R.id.nav_slideshow));

//This method will initialize the count value
initializeCountDrawer();

initializeCountDrawer()可以在需要的地方調用。 它還可用於更新導航抽屜菜單項中的計數或徽章值。

private void initializeCountDrawer() {
    //Gravity property aligns the text
    gallery.setGravity(Gravity.CENTER_VERTICAL);
    gallery.setTypeface(null, Typeface.BOLD);
    gallery.setTextColor(getResources().getColor(R.color.colorAccent));
    gallery.setText("99+");
    slideshow.setGravity(Gravity.CENTER_VERTICAL);
    slideshow.setTypeface(null,Typeface.BOLD);                
    slideshow.setTextColor(getResources().getColor(R.color.colorAccent));

    //count is added     
    slideshow.setText("7");
}

添加上述方法后,運行該應用程序。 瞧瞧! 簡單的徽章計數將顯示在導航抽屜的“圖庫”和“幻燈片”菜單項上。

動態徽章值

如果需要動態標記值,例如更新API調用或SQLite數據庫中的值,請創建可重用的方法並在Activity的OnStart()或OnResume()方法上更新它。

完整的源代碼可以在這里找到

您仍然必須使用ListView來設置布局。

為了使用NavigationView屬性,我的解決方法是將具有不同背景的SpannableString作為MenuItem的新標題傳遞。

我知道這不是最好的解決方案,但它可以很好地用作計數器。 像這樣的東西:

NavigationView navigation = (NavigationView)findViewById(R.id.navigation);
Menu menuNav = navigation.getMenu();
MenuItem element = menuNav.findItem(R.id.item5);
String before = element.getTitle().toString();

String counter = Integer.toString(5);
String s = before + "   "+counter+" ";
SpannableString sColored = new SpannableString( s );

sColored.setSpan(new BackgroundColorSpan( Color.GRAY ), s.length()-3, s.length(), 0);
sColored.setSpan(new ForegroundColorSpan( Color.WHITE ), s.length()-3, s.length(), 0);


element.setTitle(sColored);

我想添加一個 ImageView 作為徽章;

1- 添加 actionView 如下

<item
  android:id="@+id/nav_my_menu"
  android:icon="@drawable/my_nav_icon"
  android:title="@string/my_name"
  app:actionViewClass="android.widget.ImageView" />

2 - 在你的活動中 class

val yourMenu = binding.navView.menu.findItem(R.id.nav_my_menu).actionView
(yourMenu as ImageView).setImageResource(R.drawable.my_drawable)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM