在Android的下拉列表中滚动的autocompletetextview时关闭键盘(Close k

2019-09-02 14:20发布

我有我有它连接到一个Web服务,使其显示我建议,我键入autocompletetextview。 现在,我怎么能隐藏软键盘,当用户开始通过自动完成下拉滚动? 我通过网络看了,但没有找到,以detech上自动完成下拉触摸任何方法。

Answer 1:

我能想出这种情况的最佳解决方案,当用户开始滚动列表并重新显示键盘,如果用户在TextView的再次触动隐藏着键盘。 这非常适用于大多数的操作系统版本和设备的,不像其他的解决方案,你可以看到,比如设置dropDownHeight的高度。

下面是一个示例代码隐藏键盘,当用户开始滚动。 基本上,你需要创建你的AutoCompleteTextView的适配器触摸监听器。

public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ViewHolder holder;
    if (convertView == null) {
        convertView = inflater.inflate(viewResourceId, parent, false);
        holder = new ViewHolder();
        init(convertView, holder);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    convertView.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                InputMethodManager imm = (InputMethodManager) getContext()
                        .getSystemService(
                                Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(
                        searchView.getWindowToken(), 0);
            }

            return false;
        }
    });

    setView(position, holder);
    return convertView;
}


Answer 2:

我想借此答案,或@ ayorhan的回答是公认的答案,它确实是处理滚动下拉选择时驳回键盘的最佳途径。

这关@ ayorhan的解决方案一出戏,对于具有SimpleCursorAdapter使用。 我不得不做出一个自定义的SimpleCursorAdapter类:

public class SimpCursAdap extends SimpleCursorAdapter {

public SimpCursAdap(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
    super(context, layout, c, from, to, flags);

}

public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    view.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                InputMethodManager imm = (InputMethodManager) getContext()
                        .getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(
                        view.getApplicationWindowToken(), 0);
            }
            return false;
        }
    });
    return view;
   }
}

然后你就可以在任何地方实例化类:

final SimpleCursorAdapter adapter = new SimpCursAdap(aContext,
            aRowLayout,
            null,
            aColNames,
            aRowViewsIds,
            0);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.setStringConversionColumn(aValueColId);
autocompletetextview.setAdapter(adapter);


Answer 3:

如果我理解正确的话,你要消失键盘,因为它会留出更多的空间,您的下拉列表? 也许,这是相关的:

滚动下拉菜单在键盘autocompletetextview



Answer 4:

加入这一行成XML正常工作对我来说

这将使滚动列表背后的键盘。

android:dropDownHeight="wrap_content"


文章来源: Close keyboard when scrolling in dropdown on autocompletetextview in Android