CAC*_*lan 57 android android-3.0-honeycomb android-actionbar searchview
我在ActionBar中有一个searchView.我想在用户完成输入时关闭键盘.我在searchView上有以下queryTextListener
final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextChange(String newText) {
// Do something
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
showProgress();
// Do stuff, make async call
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
基于类似的问题,以下代码应该关闭键盘,但在这种情况下它不起作用:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)
两者都不起作用.我不确定这是否是Honeycomb特定的问题,或者它是否与ActionBar中的searchView相关,或两者兼而有之.有没有人得到这个工作或知道为什么它不起作用?
bku*_*ius 65
我试图做类似的事情.我需要SearchActivity从另一个启动它,Activity并在加载时在打开的搜索字段中显示搜索词.我尝试了所有的方法之上,但最终(类似于上述Ridcully的回答)我设置一个变量SearchView中onCreateOptionsMenu(),然后在onQueryTextSubmit()呼吁clearFocus()上SearchView,当用户提交一个新的搜索:
private SearchView searchView;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.search_menu, menu);
searchView = (SearchView) menu.findItem(R.id.menu_search)
.getActionView(); // set the reference to the searchView
searchView.setOnQueryTextListener(this);
searchMenuItem = (MenuItem) menu.findItem(R.id.menu_search);
searchMenuItem.expandActionView(); // expand the search action item automatically
searchView.setQuery("<put your search term here>", false); // fill in the search term by default
searchView.clearFocus(); // close the keyboard on load
return true;
}
@Override
public boolean onQueryTextSubmit(String query) {
performNewSearch(query);
searchView.clearFocus();
return true;
}
Run Code Online (Sandbox Code Playgroud)
daz*_*ito 32
简单,直截了当,干净利落:
@Override
public boolean onQueryTextSubmit(String query) {
// your search methods
searchView.clearFocus();
return true;
}
Run Code Online (Sandbox Code Playgroud)
Plu*_*gie 22
只需在onQueryTextSubmit上返回false,如下所示
@Override
public boolean onQueryTextSubmit(String s) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
Ran*_*ku' 11
如果你打电话,它会以某种方式运作
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0);
Run Code Online (Sandbox Code Playgroud)
然后
otherWidget.requestFocus();
Run Code Online (Sandbox Code Playgroud)
对我来说,以下工作:
在我的活动中,我有一个成员变量
private SearchView mSearchView;
Run Code Online (Sandbox Code Playgroud)
在onCreateOptionsMenu()我设置该变量,如下所示:
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.library, menu);
mSearchView = (SearchView)menu.findItem(R.id.miSearch).getActionView();
mSearchView.setOnQueryTextListener(this);
return true;
}
Run Code Online (Sandbox Code Playgroud)
在QueryTextListener最后,我这样做:
mSearchView.setQuery("", false);
mSearchView.setIconified(true);
Run Code Online (Sandbox Code Playgroud)
我看了一下SearchView的源代码,如果你没有将查询文本重置为一个空字符串,那么SearchView就是这样做了,并没有删除键盘.实际上,在源代码中深入挖掘,yuku建议,但我仍然更喜欢我的解决方案,因为我不必乱用那些低级别的东西.
对我来说,以上都没有在第一次提交时工作.它正在隐藏,然后立即重新显示键盘.我必须clearFocus()在视图的处理程序上发布它,以便在完成其他所有操作后实现它.
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
if (!"".equals(query)) {
mSearchView.post(new Runnable() {
@Override
public void run() {
mSearchView.clearFocus();
}
});
}
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43349 次 |
| 最近记录: |