给 ActionBar-MenuItem 显示角标:Android-ActionItemBadge

mxw8 9年前
这个库提供了一个简单方法来给 ActionBar-MenuItem 添加一个小徽章图标。

给 ActionBar-MenuItem 显示角标:Android-ActionItemBadge. 给 ActionBar-MenuItem 显示角标:Android-ActionItemBadge

Include in your project

Using Maven

The ActionItemBadge Library is pushed to [Maven Central], so you just need to add the following dependency to yourbuild.gradle.

dependencies { compile('com.mikepenz:actionitembadge:2.5.5@aar') {          transitive = true }  }

If you want to use this library with the old ActionBar. Do the following.

dependencies {      compile 'com.tundem.actionitembadge:library:1.2.0@aar' }

You use ActionbarSherlock? No problem there's now a SNAPSHOT release for ActionbarSherlock. Just do the following:

Add the SNAPSHOT repo to your repositories:

        maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }

And the compile dependency

dependencies {      compile 'com.tundem.actionitembadge:library-abs:1.2.0@aar' }

Usage

menu.xml

Create your menu.xml as you would do normally and add the app:actionLayout param. It is also a good idea to set showAsAction="always" (The badge can only be shown in the actionbar)

<menu xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        xmlns:app="http://schemas.android.com/apk/res-auto">      <item          android:id="@+id/item_samplebadge"          app:actionLayout="@layout/menu_badge"          app:showAsAction="always"          android:title="@string/sample_1"/>  </menu>

Activity

Override the onCreateOptionsMenu method

 @Override      public boolean onCreateOptionsMenu(Menu menu) {          // Inflate the menu; this adds items to the action bar if it is present.          getMenuInflater().inflate(R.menu.main, menu);        //you can add some logic (hide it if the count == 0)          if (badgeCount > 0) {              ActionItemBadge.update(this, menu.findItem(R.id.item_samplebadge), FontAwesome.Icon.faw_android, ActionItemBadge.BadgeStyle.DARKGREY, badgeCount);          } else {              ActionItemBadge.hide(menu.findItem(R.id.item_samplebadge));          }        //If you want to add your ActionItem programmatically you can do this too. You do the following:          new ActionItemBadge.Add().act(this).menu(menu).title(R.string.sample_2).itemDetails(0, SAMPLE2_ID, 1).showAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS).build(ActionItemBadge.BadgeStyle.BLUE_LARGE, 1);          return true;      }

If you want to update the item itself you can do the required stuff in the onOptionsItemSelected method and call invalidateOptionsMenu() afterwards.
    @Override      public boolean onOptionsItemSelected(MenuItem item) {          int id = item.getItemId();          if (id == R.id.item_samplebadge) {              Toast.makeText(this, R.string.sample_3, Toast.LENGTH_SHORT).show();              badgeCount--;              invalidateOptionsMenu();              return true;          } else if (id == SAMPLE2_ID) {              Toast.makeText(this, R.string.sample_4, Toast.LENGTH_SHORT).show();          }          return super.onOptionsItemSelected(item);      }

项目主页:http://www.open-open.com/lib/view/home/1434791633036