Android在触摸列表视图时删除软键盘

时间:2012-04-25 14:23:52

标签: android android-listview android-edittext

在我的应用程序中,我有一个带有列表视图和搜索栏的视图,可以在列表视图中进行搜索。当您点击搜索栏时,它会获得焦点并且软键盘会亮起。当我触摸列表视图时键盘保持在列表视图的顶部,因此我看不到很多我的列表视图。

我的问题: 如何知道列表视图是否已被触摸/滚动/ ...如何删除软键盘并从编辑文本中删除焦点?

4 个答案:

答案 0 :(得分:17)

基于@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) { }
   });

答案 1 :(得分:3)

Take a look at this question了解如何关闭键盘,以及知道列表视图是否已滚动,您可以扩展listview类并覆盖onScrollChanged()方法并在滚动时执行任何操作与

互动

编辑:实际上有OnScrollListener来监听列表视图中的滚动更改

答案 2 :(得分:1)

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) {

        }
    });

答案 3 :(得分:0)

@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);
            }
        }
    });