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

丶灬走出姿态 提交于 2020-01-20 04:58:04

问题


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" />

回答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.




回答2:


Try editing this line

android:showAsAction="ifRoom|collapseActionView"

to:

android:showAsAction="ifRoom"

it will align the edittext to the right.




回答3:


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));
     }
});


来源:https://stackoverflow.com/questions/20123177/how-to-keep-expanded-searchview-on-the-right-side-of-actionbar-while-using-cust

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!