我发现在过滤器上的解决方案ListView,并SearchView在RecyclerView单独的,但我想将它们结合起来.它甚至可能吗?
SearchView默认是聚焦的,但是当我尝试显示软件键盘时 - 它不会发生:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Run Code Online (Sandbox Code Playgroud)
但是,当我点击SearchView时 - 它确实如此.为什么?
android android-softkeyboard android-4.0-ice-cream-sandwich searchview android-4.2-jelly-bean
我已经在SherlockAction Bar中对SearchView实施了搜索过滤器.
当我输入mi想要在下面的列表视图中显示过滤结果时,仅以M开头,依此类推.但现在它显示随机结果.

public boolean onQueryTextChange(String newText) {
Log.i("Nomad", "onQueryTextChange");
if (TextUtils.isEmpty(newText)) {
adapter.getFilter().filter("");
Log.i("Nomad", "onQueryTextChange Empty String");
placesListView.clearTextFilter();
} else {
Log.i("Nomad", "onQueryTextChange " + newText.toString());
adapter.getFilter().filter(newText.toString());
}
return true;
}
public boolean onQueryTextSubmit(String query) {
Log.i("Nomad", "onQueryTextSubmit");
return false;
}
public boolean onClose() {
Log.i("Nomad", "onClose");
return false;
}
Run Code Online (Sandbox Code Playgroud) 在展开ActionBar搜索视图时,如何使用可折叠搜索视图构建单个操作项可见?为了更具描述性,这就是我需要的:
请注意,还有其他菜单项,并android:uiOptions="splitActionBarWhenNarrow"在其中定义AndroidManifest.xml.
我尝试设置自定义搜索项目布局:
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" />
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
但默认情况下,搜索视图会占用所有可用宽度,而按钮则不可见.我不知道如何强制SearchView填充应用程序图标和菜单项之间的所有可用空间.我发现的只是android:maxWidth属性,但这只允许硬编码维度,我正在寻找一些更灵活的解决方案.我也试着RelativeLayout与android:layout_toRightOf="@id/search_view"没有运气.
有人知道如何更改appcompat SearchView的文本颜色吗?我花了2个小时从SO那里尝试了几个建议,但都没有.
这是我的代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:espacios="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/layer_switcher_button"
android:icon="@drawable/b_categorias"
android:title="@string/menu_layer_switcher_title"
espacios:showAsAction="ifRoom|collapseActionView"/>
<item
android:id="@+id/action_search"
android:icon="@drawable/b_buscar"
android:title="@string/menu_search_title"
espacios:actionViewClass="android.support.v7.widget.SearchView"
espacios:showAsAction="ifRoom|collapseActionView"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
在我的活动中我有这个:
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
menuItem layerSwitcher = menu.findItem(R.id.layer_switcher_button);
layerSwitcher.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
onLayerSwitcherButtonClicked();
return false;
}
});
MenuItem searchItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
LinearLayout ll = (LinearLayout) searchView.getChildAt(0);
TextView textView = (TextView) ll.getChildAt(0);
textView.setTextColor(R.color.white);
}
Run Code Online (Sandbox Code Playgroud) 我想实现一个具有建议功能的ActionBar搜索小工具.
我已经在我的ORMLite数据库中存储了一个字符串数组,用于建议.
如何在不创建类加载的情况下执行此操作(Provider,Searchable ......!)?
我正在更新一个应用程序以使用新的Toolbar而不是常规的ActionBar.在我的应用中,用户必须能够从其联系人列表中选择联系人.为此,我SearchView在菜单中添加了一个.联系人已经在列表中; 该SearchView用于筛选使用列表ArrayAdapter.getFilter()方法.
这一切都很好用ActionBar,但是它Toolbar的高度被拉伸到键盘后面.使用Android设备监视器中的XML检查我可以看到ListView键盘后面的存在.
它似乎似乎SearchView想要显示建议,但我没有配置这样的东西.知道出了什么问题吗?
图像说明了这个问题.它们显示了正常,扩展和聚焦的状态SearchView.
这是我的XML菜单:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_forwarding_contact_search"
app:showAsAction="always"
android:title="@string/forwarding_contact_search"
app:actionViewClass="android.support.v7.widget.SearchView"
android:icon="@drawable/abc_ic_search_api_mtrl_alpha"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
编辑
给予工具栏固定的高度并不能解决问题,因为它SearchView在聚焦时会消失.改变任何一项的重力似乎都没有影响SearchView.

这就是我浏览应用的方式:
当我从list-detail-fragment导航时,我希望将searchview的当前过滤器保存在字符串变量中.我在执行onQueryTextChange时存储searchview的值.
问题:我无法存储实际的过滤器值,因为当我从列表导航到详细信息时会调用onQueryTextChange,因为有些东西清除了searchview的文本.
// ...
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
@Override
public boolean onQueryTextChange(String s) {
searchReceived(s);
return true;
}
});
// ...
public void searchReceived(String searchQuery)
{
this.stateHolder.searchQuery = searchQuery;
// more code...
}
Run Code Online (Sandbox Code Playgroud)
当我想在导航回来时恢复过滤器时,它只是使用空字符串过滤,因为存储了错误的值this.stateHolder.searchQuery.
堆:
onQueryTextChange():139, EmployeeListFragment$1 {com.example.exampleapp.fragment}
onTextChanged():1153, SearchView {android.widget}
access$2000():92, SearchView {android.widget}
onTextChanged():1638, SearchView$11 {android.widget}
sendOnTextChanged():7408, TextView {android.widget}
setText():3816, TextView {android.widget}
setText():3671, TextView {android.widget}
setText():80, EditText {android.widget}
setText():3646, TextView {android.widget}
setQuery():511, SearchView {android.widget} …Run Code Online (Sandbox Code Playgroud) 我在使用appcompat.v7之前在Actionbar中实现了SearchView,但是当我想将SearchView与支持库v7一起使用时,它显示了null异常
很有型
<item android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/ic_action_search"
app:showAsAction="always|collapseActionView"
android:actionViewClass="android.support.v7.widget.SearchView" />
Run Code Online (Sandbox Code Playgroud)
在Java类中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
searchView.setOnQueryTextListener(this);
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在onCreateOptionsMenu中声明SearchView以便能够设置查询侦听器?
我的应用程序中有一个SearchView小部件,我想问一些关于使它自定义的问题.首先,您只能通过点击搜索图标开始搜索,有没有办法让整个SearchView可点击?此外,还有一种方法可以在单击时使SearchView显示为这样吗?
一只忙碌的猫http://i41.tinypic.com/rr2ow4.png ![] [1]
它现在处于这种状态:
一只忙碌的猫http://i41.tinypic.com/11jlu2p.png ![] [1]
这是我的代码:
citySearch = (SearchView) findViewById(R.id.city_search_bar);
citySearch.setBackgroundResource(R.drawable.search_background);
citySearch.setOnSearchClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
citySearch.setIconifiedByDefault(true);
//citySearch.setIconified(true);
}
});
citySearch.setOnQueryTextListener(new OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String text) {
((Filterable) cityListView.getAdapter()).getFilter().filter(text);
return false;
}
@Override
public boolean onQueryTextSubmit(String text) {
return false;
}
});
try
{
Field searchField = SearchView.class.getDeclaredField("mSearchButton");
searchField.setAccessible(true);
ImageView searchBtn = (ImageView)searchField.get(citySearch);
searchBtn.setImageResource(R.drawable.search_icon);
searchBtn.setScaleType(ScaleType.FIT_CENTER);
searchPlate.setBackgroundResource(R.drawable.search_background);
}
catch (NoSuchFieldException e)
{
Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
catch (IllegalAccessException e)
{
Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
Run Code Online (Sandbox Code Playgroud) android ×10
searchview ×10
android-4.0-ice-cream-sandwich ×1
filter ×1
ormlite ×1
save ×1
state ×1
styles ×1