我的工具栏上有通知铃图标,其中包含通知计数文本。它按预期工作,但当通知计数为零时,单击响铃图标不起作用。我认为这是因为操作布局显示了通知铃声的计数,但同时我认为铃声图标应该接受 onclick 事件。我知道这是我想念的东西,但我能够找出代码中断的地方。请帮帮我。
菜单项
<item android:id="@+id/notificationBell"
android:title=""
android:icon="@drawable/notification"
app:actionLayout="@layout/menuitem_notification_count"
android:visible="true"
app:showAsAction="always">
</item>
操作布局 - menuitem_notification_count
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
style="?attr/actionButtonStyle"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clipToPadding="false"
android:focusable="true">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/notification"/>
<TextView
android:id="@+id/cart_badge"
android:layout_width="22dp"
android:layout_height="22dp"
android:layout_gravity="end|top"
android:layout_marginEnd="-10dp"
android:layout_marginTop="1dp"
android:padding="2dp"
android:background="@drawable/notification_count_background"
android:textAlignment="center"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="12sp"/>
</FrameLayout>
创建选项菜单
@Override
public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.menu_notification, menu);
MenuItem notificationBell = menu.findItem(R.id.notificationBell);
textNotificationCount = notificationBell.getActionView().findViewById(R.id.cart_badge);
Typeface fontFace = ResourcesCompat.getFont(getActivity(), R.font.roboto_medium_numbers);
textNotificationCount.setTypeface(fontFace);
notificationCount = getNotificationCount();
int checkCount = Integer.parseInt(notificationCount);
Log.d(TAG, "run: Notification Count = " + notificationCount);
notificationBell.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
if (checkCount==0){
// THIS TOAST AND LOG NEVER SHOWS
Log.d(TAG, "run: Notification Count Is 0");
Toast.makeText(getActivity(), "No New Notifications.", Toast.LENGTH_SHORT).show();
}
return false;
}
});
if (checkCount == 0) {
if (textNotificationCount.getVisibility() != View.GONE) {
textNotificationCount.setVisibility(View.GONE);
}
} else if (checkCount > 99) {
//textNotificationCount.setText(String.valueOf(Math.min(notificationCount, 99))+"+");
textNotificationCount.setText("99+");
if (textNotificationCount.getVisibility() != View.VISIBLE) {
textNotificationCount.setVisibility(View.VISIBLE);
}
} else {
textNotificationCount.setText(notificationCount);
if (textNotificationCount.getVisibility() != View.VISIBLE) {
textNotificationCount.setVisibility(View.VISIBLE);
}
}
textNotificationCount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// ON CLICK WORKS WHEN COUNT IS NOT ZERO
}
});
}
我已经用
MaterialToolbar
解决了同样的问题一段时间了。
根据 copyprogramming.com 上的这篇文章,某些工具栏实现存在一个已知问题。
对我有用的解决方案是在布局视图上手动设置 OnClickListener:
val toolbar = view.findViewById<MaterialToolbar>(R.id.the_toolbar)
val actionView = toolbar.menu
.findItem(R.id.notifications_menu_item).actionView
actionView!!.setOnClickListener { view ->
// Do something
}