Как я сказал в своем комментарии, представления MenuItems
не были доступны, поэтому у вас нет прямых вариантов доступа к ним. Один из способов изменить селектор для этих MenuItems
— это использовать MenuItems
с представлениями действий, установленными на ImageViews
, чтобы сохранить обычный значок и изменить селектор для этих ImageViews
. Пример ниже:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menuFirst"
android:showAsAction="always"
android:actionLayout="@layout/image_menu_layout"/>
</menu>
<!-- image_menu_layout.xml -->
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
style="@style/Widget.ActionButton"/>
Код для части ActionBar
:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.your_menu, menu);
// call this for any menu item that you might have
setUpMenuItem(menu, R.id.menuFirst, false, null);
return super.onCreateOptionsMenu(menu);
}
/**
* This methods set up the MenuItems.
*
* @param menu the menu reference, this would refer either to the menu of the ActionBar or
* the menu of the ActionMode
* @param itemId the id of the MenuItem which needs work
* @param onActionMode flag to indicate if we're working on the ActionBar or ActionMode
* @param modeRef the ActionMode reference(only when the MenuItem belongs to the ActionMode,
* null otherwise)
*/
private void setUpMenuItem(Menu menu, int itemId, final boolean onActionMode,
final ActionMode modeRef) {
final MenuItem menuItem = menu.findItem(itemId);
ImageView itemLayout = (ImageView) menuItem.getActionView();
itemLayout.setBackgroundResource(onActionMode ? R.drawable.selector_for_actionmode : R
.drawable.selector_for_actionbar);
itemLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// for simplicity, wire up the normal selection callbacks(if possible,
// meaning the Activity implements the ActionMode.Callback)
if (onActionMode) {
onActionItemClicked(modeRef, menuItem);
} else {
onOptionsItemSelected(menuItem);
}
}
});
}
Код для части ActionMode
:
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
getMenuInflater().inflate(R.menu.actiomode_menu, menu);
// call this for any menu item that you might have
setUpMenuItem(menu, R.id.menu_item_from_actionmode, true, mode);
return true;
}
Этот метод также позволит вам избежать необходимости обрабатывать/сохранять статус ActionBar
/ActionMode
, пока используется Activity
.
person
user
schedule
19.01.2014
ImageView
) для пунктовActionBar
иActionMode
и установить правильный (другой) селектор наImageView
(вам также потребуется управлять взаимодействием сImageView
, также известным как ваш новыйMenuItem
). - person user   schedule 16.01.2014