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>
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);
Chakri Reddyが提案するように:
交換したばかりです
この:
in.hideSoftInputFromWindow(arg1.getWindowToken(), 0);
と:
in.hideSoftInputFromWindow(arg1.getApplicationWindowToken(), 0);
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;
}
同様のスレッドでこのコードのチャンクが見つかりました。それが役に立てば幸い:
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);
}
}
リンク 元の投稿へ。それは受け入れられた答えではないことに注意してください。
これが誰かを助ける場合に備えて、私は同様の状況にありました。
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;
}
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);
}
}
});
私はすでに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) { }
});
これを試してください..それはうまくいきます.. !!!
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);
} });