Как сохранить расширенный SearchView в правой части ActionBar (при использовании пользовательского значка)?

Мой вопрос тесно связан с неправильным выравниванием SearchView и позициями SearchView при расширении в ActionBar, но ответы, опубликованные там, не работают.

Итак, я использую SearchView в панели действий :

<item android:id="@+id/action_search" android:icon="@drawable/navi_search" android:title="@string/action_search" android:showAsAction="ifRoom|collapseActionView" android:actionViewClass="android.widget.SearchView" /> 

По умолчанию это выглядит (верхний правый угол, рядом с меню переполнения):

Введите описание изображения здесь

Проблема в том, что при расширении я хотел бы, чтобы SearchView оставался справа , но вместо этого он перемещается в левый край, рядом с кнопкой home (значок приложения).

Я попытался изменить showAsAction на любой из них ( как предлагается здесь ):

 android:showAsAction="ifRoom" android:showAsAction="always" 

… И это исправляет выравнивание при расширении, но пользовательский значок теряется при сложенном состоянии:

Введите описание изображения здесь

Кроме того, такие вещи, как android:layout_alignParentRight="true" и android:layout_centerInParent="true" в меню <item> , не влияют.

Есть идеи?

Я нацелен на Android 4.0 и выше:

 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> 

Хорошо, я нашел способ:

В onCreateOptionsMenu() , после стандартного меню раздувания материала, установите ActionBar.LayoutParams с Gravity.RIGHT для экземпляра SearchView :

 @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); // ... // Find the SearchView; make it aligned to right, also in expanded mode: MenuItem item = menu.findItem(R.id.action_search); SearchView search = (SearchView) item.getActionView(); search.setLayoutParams(new ActionBar.LayoutParams(Gravity.RIGHT)); } 

(В XML-определении меню я все еще использую android:showAsAction="ifRoom|collapseActionView" .)

Теперь SearchView открывается справа, там же, где находится значок, и пользовательский значок все еще используется.

Попробуйте отредактировать эту строку

 android:showAsAction="ifRoom|collapseActionView" 

чтобы:

 android:showAsAction="ifRoom" 

Он выравнивает edittext вправо.