我需要在SearchBar中显示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 activity类中,我按如下方式配置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”,它默认会折叠,但我现在可以看到第二项:
在上图中我已按下搜索图标
我无法弄清楚有两个问题:
答案 0 :(得分:3)
这是我隐藏内部搜索图标的解决方案。
在您管理主题的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
答案 1 :(得分:3)
我设法通过使用
解决了这个问题mySearchView.setIconfied(false);
而不是setIconifiedByDefault()
P.S。我使用的是android.support.v7.widget.SearchView
答案 2 :(得分:0)
我解决两个元素显示的方法是为SearchView设置一个特定的宽度。
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT);
searchView.setLayoutParams(lp);
我使用的代码是:
<强> RES /菜单/ main.xml中强>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/search"
android:actionViewClass="com.actionbarsherlock.widget.SearchView"
android:showAsAction="always"
android:title="@string/action_search"/>
<item
android:id="@+id/settings"
android:showAsAction="ifRoom"
android:onClick="startSettingsActivity"
android:title="@string/action_settings"/>
</menu>
在活动
中@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
MenuItem searchViewItem = menu.findItem(R.id.search);
SearchView searchView = (SearchView) searchViewItem.getActionView();
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT);
searchView.setLayoutParams(lp);
searchView.setIconifiedByDefault(false);
searchView.setSubmitButtonEnabled(false);
return true;
}
public void startQuickSearchActivity(MenuItem menuItem){
startActivity(new Intent(this, QuickSearchActivity_.class));
}