How to keep expanded SearchView on the right side of ActionBar (while using custom icon)?
android, android-4.0-ice-cream-sandwich, android-actionbar, android-layout, searchview
Solution
Alright, I found a way:
In `onCreateOptionsMenu()`, after the standard menu inflating stuff, set `ActionBar.LayoutParams` with `Gravity.RIGHT` for the `SearchView` instance:
@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));
}
(In the menu definition XML, I still use `android:showAsAction="ifRoom|collapseActionView"`.)
Now the SearchView opens on the right, in the same place where the icon is, and the custom icon is still in use.
Problem
My question is closely related to SearchView wrong alignment and SearchView positions when expanded in ActionBar but the answers posted there do not work. So, I'm using a SearchView in the Action Bar: ``` <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" /> ``` It looks like this by default (top-right corner, next to overflow menu): Problem is, when expanded, I'd like the SearchView to stay on the right, but instead, it moves to the left edge, next to home button (app icon). I tried changing `showAsAction` to either of these (as suggested here): ``` android:showAsAction="ifRoom" android:showAsAction="always" ``` ...And that does fix the alignment when expanded, but the custom icon is lost when in collapsed state: Also, stuff like `android:layout_alignParentRight="true"` and `android:layout_centerInParent="true"` on the menu `<item>` have no effect. Any ideas? I'm targetting Android 4.0 and above: ``` <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" /> ```