Для меня следующий подход прекрасно работает для новых версий Android - я протестировал его на Android 4.2 и Android 5.0.1.
Идея состоит в том, чтобы заменить представление значка действия на пользовательское представление.Здесь я должен обработать один щелчок, и я могу справиться с длинным щелчком.
Если я хочу, чтобы внешний вид был точно таким же, как обычные значки на панели действий, работает следующее.
Во-первых,создайте макет, содержащий только ImageButton с вашим значком.
<?xml version="1.0" encoding="utf-8"?>
<ImageButton xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/myButton"
style="?android:attr/actionButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@layout/text_view_initializing"
android:src="@drawable/ic_action_plus" />
Затем поместите этот ImageButton в панель действий и присоедините к нему слушателей.
MenuItem myItem = menu.findItem(R.id.my_action);
myItem.setActionView(R.layout.my_image_button);
myItem.getActionView().setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
// here, I have to put the stuff that normally goes in onOptionItemSelected
}
});
myItem.getActionView().setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(final View v) {
// here, I put the long click stuff
}
});
Важное замечание: это будет работать толькоесли элемент появляется в панели действий.Таким образом, все, что вы хотите сделать при длинном щелчке, не будет доступно таким образом, если эта опция появится в выпадающем меню.