web-dev-qa-db-ja.com

ツールバーのメニュー項目アイコンにバッジを追加する方法

自分で答えを見つけようとしましたが、見つけられませんでした。

次のように、ツールバーのMenuItemアイコンにバッジを作成する必要があります。

enter image description here

どうすればこれを作成できますか?

15
Artem

ステップごとの機能は次のとおりです。

menu.xmlを追加します

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
         xmlns:app="http://schemas.Android.com/apk/res-auto">

         <item
              Android:id="@+id/actionNotifications"
              Android:icon="@drawable/ic_info_outline_white_24dp"
              Android:menuCategory="secondary"
              Android:orderInCategory="1"
              Android:title="Cart"
              app:actionLayout="@layout/notification_layout"
              app:showAsAction="always" />
    </menu>

次に、notification_layout.xmlを追加します。このレイアウトは、通知アイコンレイアウトとして使用されます

     <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
        style="@Android:style/Widget.ActionButton"
        Android:layout_width="wrap_content"
        Android:layout_height="fill_parent"
        Android:layout_gravity="center"
        Android:background="@Android:color/transparent"
        Android:clickable="true"
        Android:gravity="center"
        Android:orientation="vertical">

     <ImageView
         Android:id="@+id/hotlist_bell"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:layout_margin="0dp"
         Android:contentDescription="Notification Icon"
         Android:gravity="center"
         Android:src="@drawable/ic_info_outline_white_24dp" />

     <TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:id="@+id/txtCount"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content"
         Android:layout_marginBottom="@dimen/x5dp"
         Android:layout_marginLeft="@dimen/x10dp"
         Android:layout_marginRight="0dp"
         Android:background="@drawable/pointer_"
         Android:gravity="center"
         Android:minWidth="17sp"
         Android:text="0"
         Android:textColor="#ffffffff"
         Android:textSize="12sp" />
    </RelativeLayout>

今アクティビティ中

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    final View notificaitons = menu.findItem(R.id.actionNotifications).getActionView();

    txtViewCount = (TextView) notificaitons.findViewById(R.id.txtCount);
    updateHotCount(count++);
    txtViewCount.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            updateHotCount(count++);
        }
    });
    notificaitons.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    //    TODO
        }
    });


    return true;
}

次の関数(stackoverflowから取得)をアクティビティ内に配置して、カウンターを更新できます。

    public void updateHotCount(final int new_hot_number) {
    count = new_hot_number;
    if (count < 0) return;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (count == 0)
                txtViewCount.setVisibility(View.GONE);
            else {
                txtViewCount.setVisibility(View.VISIBLE);
                txtViewCount.setText(Integer.toString(count));
                // supportInvalidateOptionsMenu();
            }
        }
    });
}      
23
Faraz Ahmed

私はそれが可能だと思います:

<ImageView
        Android:id="@+id/counterBackground"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:background="@drawable/unread_background" /> <!-- your icon -->

    <TextView
        Android:id="@+id/count"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="1"
        Android:textSize="8sp"
        Android:layout_centerInParent="true"
        Android:textColor="#FFFFFF" />

そして、そのアイコンにbackground。alsoとして使用する場合、デフォルトのアイコンも削除/無効にする必要があります。

あなたが見てみたいことがあります:

ナビゲーションドロワーアクションバーからアプリアイコンを削除できない

ナビゲーションドロワーアイコンを削除し、アプリアイコンを使用して開きます

https://stackoverflow.com/a/29160904/440911

また、Android-sdk/platforms/Android-22/data/res、そのアイコンがあるはずです。それを見つけて、目的に使用するだけです(たとえば、ImageViewを追加し、as backgroundを追加します)

見てみましょう:https://stackoverflow.com/a/34999691/440911

3
ʍѳђઽ૯ท