![](/img/trans.png)
[英]How to add click event to item on NavigationView of Android
[英]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.