在我的应用程序中,我有一个带有列表视图和搜索栏的视图,可以在列表视图中搜索。当您点击搜索栏时,它会获得焦点并且软键盘会出现。当我触摸列表视图时,键盘停留在列表视图的顶部,因此我看不到很多列表视图。
我的问题:我如何知道列表视图是否已被触摸/滚动/...以及如何删除软键盘并从编辑文本中删除焦点?
在我的应用程序中,我有一个带有列表视图和搜索栏的视图,可以在列表视图中搜索。当您点击搜索栏时,它会获得焦点并且软键盘会出现。当我触摸列表视图时,键盘停留在列表视图的顶部,因此我看不到很多列表视图。
我的问题:我如何知道列表视图是否已被触摸/滚动/...以及如何删除软键盘并从编辑文本中删除焦点?
基于@androidnoob 的回答,我在这里(对于其他有此特定问题的人)发布所需的完整代码。
list.setOnScrollListener(new OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
//hide KB
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(colleagueSearch.getWindowToken(), 0);
}
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { }
});
看一下这个问题以了解如何关闭键盘,至于知道列表视图是否已滚动,您可以扩展列表视图类并覆盖 onScrollChanged() 方法,并在与滚动交互时做任何您想做的事情
编辑:实际上有一个OnScrollListener来监听列表视图中的滚动变化
yourListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState != 0){
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(yourEditText.getWindowToken(), 0);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
@Dr.Luiji 回答有效,但我认为最好在用户触摸listView 后立即隐藏软键。
myListView.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(((Activity) mContext).getCurrentFocus().getWindowToken(), 0);
}
}
});