web-dev-qa-db-ja.com

Android:AutoCompleteTextViewソフトキーボードを非表示

AutoCompleteTextViewがあります。これは、ユーザーが3文字入力した後にいつものように提案を表示します。提案リストを一度タッチすると、ソフトキーボードが非表示になります。以下の表のレイアウトで行った操作では、候補リスト以外の場所をクリックしたときにのみキーボードが非表示になります。

XML

<TableRow
    Android:id="@+id/tableRow2"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:gravity="center" >

    <AutoCompleteTextView
        Android:id="@+id/auto_insert_meds"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:ems="15"
        Android:inputType="textVisiblePassword|textMultiLine"
        Android:scrollHorizontally="false"
        Android:text=""
        Android:textSize="16sp" />
</TableRow>

Java

TableLayout tbl = (TableLayout) findViewById(R.id.main_table);
tbl.setOnTouchListener(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        in.hideSoftInputFromWindow(v.getWindowToken(), 0);
        return true;
    }
});

カスタムリストのXML

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/medlist_linear_layout"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content" >

        <TextView
        Android:id="@+id/med_name"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:scrollHorizontally="false"
        Android:padding="3dp"
        Android:textColor="@Android:color/white" />

</LinearLayout>
15
ChrisGeo

OnItemClickListenerを使用します。これがうまくいくことを願っています:)

AutoCompleteTextView text = (AutoCompleteTextView) findViewById(R.id.auto_insert_meds);

text.setOnItemClickListener(new OnItemClickListener() {

  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(arg1.getWindowToken(), 0);

  }

});

[〜#〜]更新[〜#〜]

これを使って

in.hideSoftInputFromWindow(arg1.getApplicationWindowToken(), 0);

の代わりに -

in.hideSoftInputFromWindow(arg1.getWindowToken(), 0);
21
user948620

Chakri Reddyが提案するように:

交換したばかりです

この:

 in.hideSoftInputFromWindow(arg1.getWindowToken(), 0);

と:

 in.hideSoftInputFromWindow(arg1.getApplicationWindowToken(), 0);
16
Shylendra Madda

1)AutoCompleteTextViewドロップダウンの高さをMATCH_PARENTに変更します

setDropDownHeight(LinearLayout.LayoutParams.MATCH_PARENT);

2)AutoCompleteTextViewアダプターのgetView()をオーバーライドして、ソフトキーボードを閉じます。

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = super.getView(position, convertView, parent);
    v.setOnTouchListener(new View.OnTouchListener() {

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

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

            return false;
        }
    });

    return v;
}
9
noxo

同様のスレッドでこのコードのチャンクが見つかりました。それが役に立てば幸い:

    private void hideKeyboard() {   
        // Check if no view has focus:
        View view = this.getCurrentFocus();
        if (view != null) {
            InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
}

リンク 元の投稿へ。それは受け入れられた答えではないことに注意してください。

5
Carlos Borau

これが誰かを助ける場合に備えて、私は同様の状況にありました。

getWindow().requestFeature(Window.FEATURE_NO_TITLE);onCreateDialog()を使用したため、AutoCompleteTextViewがタイトルバーのないDialogFragmentに表示されました。

FEATURE_NO_TITLEの後に次の行を追加し、キーボードに結果リストを表示しました。

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Dialog dialogo=super.onCreateDialog(savedInstanceState);
        dialogo.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        dialogo.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        return dialogo;
    }
1
Alex
AutoCompleteTextView autoText= (AutoCompleteTextView) findViewById(R.id.auto_insert_meds);

autoText.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

    }
  }
});
1
Ashwin H

私はすでにTextWatcherを使用して、ユーザーが少なくとも3文字(ダウンロードAPIをトリガーする)を入力したことを次のように検出しました。

    searchAutoComplete.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // when the user has clicked on an item in the list, it will trigger onTextChanged.
            // To avoid querying the server and showing the dropdown again, use searchAutoComplete.isPerformingCompletion()
            if (!searchAutoComplete.isPerformingCompletion()){
                if (s != null && s.length() >= 3) {
                    downloadSearchResults(s.toString());
                } else {
                    searchAutoComplete.dismissDropDown();// hide dropdown after user has deleted characters and there's less than 3 visible
                }
            } else {
                // user has clicked on a list item so hide the soft keyboard
                InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if (in != null) in.hideSoftInputFromWindow(searchAutoComplete.getApplicationWindowToken(), 0);
            }
        }

        @Override
        public void afterTextChanged(Editable s) { }
    });
0

これを試してください..それはうまくいきます.. !!!

 AutoCompleteTextView auto_text = (AutoCompleteTextView)findViewById(R.id.auto_insert_meds);

 auto_text.setOnItemClickListener(new OnItemClickListener() {

 @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) 
{
   InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);

   in.hideSoftInputFromWindow(arg1.getApplicationWindowToken(), 0);

} });
0
chakri Reddy