How to keep expanded SearchView on the right side of ActionBar (while using custom icon)?
Solution 1
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.
Solution 2
Try editing this line
android:showAsAction="ifRoom|collapseActionView"
to:
android:showAsAction="ifRoom"
it will align the edittext to the right.
Jonik
I'm a generalist software developer who's been programming professionally for 15+ years. Simplicity, code maintainability, easy deployments, automated testing, and continuous integration are some of the things close to my heart as a developer. I currently work as a freelance developer, focused on backend (Java/Scala/JVM mostly) and Android development. Enjoying Kotlin and Jetpack Compose nowadays especially! You can reach me by email through <jonik at iki dot country code for finland>.
Updated on June 12, 2022Comments
-
Jonik almost 2 years
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"
andandroid: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" />