How to build ActionBar
with collapsible search view with single action item visible, when search view is expanded? To be more descriptive, this is what I need:
Note that there are other menu items and android:uiOptions="splitActionBarWhenNarrow"
is defined in AndroidManifest.xml
.
I tried to set up custom search item layout:
menu.xml
<item
android:id="@+id/menu_search"
android:actionLayout="@layout/actionbar_search"
android:icon="@drawable/action_search"
android:showAsAction="always|collapseActionView"
android:title="@string/search" />
actionbar_search.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="right"
android:orientation="horizontal" >
<com.actionbarsherlock.widget.SearchView
android:id="@+id/search_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:iconifiedByDefault="false"
android:queryHint="@string/search_hint" />
<ImageButton
android:id="@+id/add_item"
android:layout_width="wrap_content"
android:layout_height="match_parent"
style="@style/Widget.Sherlock.ActionButton"
android:src="@drawable/content_new"/>
</LinearLayout>
But by default search view takes all available width and button is not visible. I don't know how to force SearchView
to fill all available space between app icon and menu item. All I found is android:maxWidth
property, but this only allows to hardcoded dimension, and I'm looking for some more flexible solution. I tried also RelativeLayout
with android:layout_toRightOf="@id/search_view"
with no luck.
After considering the suggestions from comments, many googling and testing succeeded in obtaining the desired effect. I'm not proud of this solution but it works, it's not too complicated and should be enough for this case.
In resume what I did:
SearchView
with custom "add item" button incustomView
ofActionBar
.collapseActionView
andandroid:actionLayout
from search item inmenu.xml
SearchView
programmatically.Some code to better understand what I did. Maybe this can be useful for someone.
Simply you can do it like this
And at search item in menu.xml make
showAsAction="always"
Note: I am using android.support.v7.widget.SearchView but in your case it doesn't matter
Just a change menu xml. showaction prefix to your app name
You can do it only using yourmenu.xml.
Set your other menu icon to always show as an action. Your menu.xml should look like this: