2013-05-11 13 views
5

私はそれを私が入力するように私に提案を示すように私はそれをwebserviceにリンクしているオートコンプリート・テクスチャ・ビューを持っています。ユーザーがオートコンプリートドロップダウンをスクロールし始めたら、ソフトキーボードを隠すにはどうすればいいですか?私はネットを見渡しましたが、オートコンプリートドロップダウンのタッチを検出する方法は見つかりませんでした。Androidでautocompletetextviewのドロップダウンでスクロールするときにキーボードを閉じる

+0

uはhttp://developer.android.com/reference/android/view/inputmethodを使用することができます/InputMethodManager.html&http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html#hideSoftInputFromWindow%28android.os.IBinder,%20int%29 – Sam

答えて

0

私が正しく理解していれば、ドロップダウンリストの余地が増えるため、キーボードが消えてしまいますか?おそらく、これが関連している:ユーザーがリストをスクロールし、ユーザーが再びのTextViewに触れると、再びキーボードを示す開始したとき、私はこのために出てくる可能性があり

Scrolling drop-down-menu over the keyboard in autocompletetextview

5

最善の解決策は、キーボードを隠しています。これは、dropDownHeightの高さの設定など、あなたが見ることができる他のソリューションとは異なり、ほとんどのOSのバージョンとデバイスでほとんど機能します。

以下は、ユーザーがスクロールを開始したときにキーボードを非表示にするサンプルコードです。基本的には、AutoCompleteTextViewのアダプタにタッチリスナーを作成する必要があります。 XMLにこの行を追加する

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; 
} 
+0

brilliant !!!!! – Netero

0

私には正常に動作しますこれは、スクロールリストの後ろにキーボードを行います。

android:dropDownHeight="wrap_content" 
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);