Вот как я это сделал:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem item = menu.findItem(R.id.no_toast);
item.setActionView(R.layout.custom_view);
item.getActionView().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//handle click (just this item)
}
});
return true;
}
, и это мое меню:
<?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:title="Never gonna see me in a toast!"
app:showAsAction="always"
android:id="@+id/no_toast" />
</menu>
мой пользовательский вид - это просто ImageButton
:
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/Widget.AppCompat.Toolbar.Button.Navigation"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/icon" />
Примечание: не забудьте установить стиль, Widget.AppCompat.Toolbar.Button.Navigation
позволяет правильно отображать IamgeButton
на панели инструментов.
PS: Лично я предпочитаю поведение по умолчанию, но это был мой случай : Я отключил право налево для своего приложения, и после этого, когда я установил языковой стандарт по умолчанию на язык rtl , тост появлялся не в ту сторону! Честно говоря, я торопился и не узнал причину, но я буду признателен, если кто-нибудь сообщит мне, почему, во всяком случае, так я прошел.