我需要在ActionBar中显示SearchView总是展开和另外一个按钮,以便用户快速访问Search Activity中的搜索字符串.
我的活动有这个菜单布局:
我的活动有这个菜单布局:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="always" android:actionViewClass="com.actionbarsherlock.widget.SearchView"/> <item android:id="@+id/action_configure" android:title="@string/action_configure" android:icon="@android:drawable/ic_menu_preferences" android:showAsAction="always" /> </menu>
在Search活动类中,我按如下方式配置ActionBar:
@Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.search,menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); searchView.setSubmitButtonEnabled(false); return true; }
问题是,如果我做searchView.setIconifiedByDefault(false);我看到这张照片:
您可以注意到没有第二个菜单项.在这里,如果我设置android:showAsAction =“always | collapseActionView”,它默认会折叠,但我现在可以看到第二项:
在上图中我已按下搜索图标
有两个问题我无法弄清楚:
解决方法
这是我隐藏内部搜索图标的解决方案.
在您管理主题的styles.xml中,将以下内容添加到application_theme部分(通常在base_theme下面)
<!--Application Theme--> <style name="application_theme" parent="application_base_theme"> <item name="searchViewSearchIcon">@android:color/transparent</item> <item name="searchViewCloseIcon">@android:color/transparent</item> </style>
这会强制操作栏搜索小部件中所有出现的搜索图标都是透明的,并且是不可见的.
它们仍会在文本字段中占用空间,在左侧创建一个看不见的边距.如果要解决此问题,则必须使用自己的类扩展com.actionbarsherlock.widget.SearchView并添加以下内容:
ImageView searchHintIcon = (ImageView) findViewById(R.id.abs__search_mag_icon); searchHintIcon.setVisibility(View.GONE);
我会将它添加到构造函数,但也覆盖setIconified和setIconifiedByDefault并将其包含在那里.这会强制它在展开操作视图时隐藏图标.
要在操作栏中显示其他图标,请尝试设置:
android:showAsAction="collapseActionView|ifRoom"
这应该会导致搜索栏在操作栏中有足够的空间时展开,而不是将它们完全从栏中强制移除.
HTH