How to keep expanded SearchView on the right side of ActionBar (while using custom icon)?
A

3

7

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):

enter image description here

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:

enter image description here

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" />
Audette answered 21/11, 2013 at 14:10 Comment(0)
A
8

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.

Audette answered 22/11, 2013 at 13:57 Comment(2)
One might assume that android:gravity="right" on the SearchView <item> in menu XML would achieve this too, but at least on my test devices it does not.Audette
Yes, it works fine on Android 4.0+. Do you get an exception with this approach? Consider asking a new question.Audette
S
3

Try editing this line

android:showAsAction="ifRoom|collapseActionView"

to:

android:showAsAction="ifRoom"

it will align the edittext to the right.

Seritaserjeant answered 3/4, 2014 at 9:15 Comment(1)
By reading the whole question you'd see that I already tried that. (While it fixed the alignment, it somehow caused my custom icon to be lost.)Audette
S
0

Using this worked for me:

final SearchView searchView = (SearchView) searchMenuItem.getActionView();
searchView.setOnSearchClickListener(new View.OnClickListener()
{
     @Override
     public void onClick(View v)
     {
         searchView.setLayoutParams(new Toolbar.LayoutParams(Gravity.END));
     }
});
Shandrashandrydan answered 5/1, 2019 at 15:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.