EditText
があり、フォーカスが失われたとき(キーボードが不要な要素)、ソフトキーボードが自動的に非表示になるか、または自分で非表示にする必要がありますか?ソフトキーボードがフォーカスを失うのを隠す
私はtrueを返しますrequestFocus()
、(私は推測EditText
のように振る舞うべきです)AutoCompleteSearchView
からButton
にフォーカスを移動するんだけど、キーボードが非表示になりません。
EditText
があり、フォーカスが失われたとき(キーボードが不要な要素)、ソフトキーボードが自動的に非表示になるか、または自分で非表示にする必要がありますか?ソフトキーボードがフォーカスを失うのを隠す
私はtrueを返しますrequestFocus()
、(私は推測EditText
のように振る舞うべきです)AutoCompleteSearchView
からButton
にフォーカスを移動するんだけど、キーボードが非表示になりません。
ベストな方法からより多くの情報を見つけることができますがのEditTextのためOnFocusChangeListenerを設定し、リスナーのOnFocusChangeメソッドにキーボードにコードを追加することです。 EditTextがフォーカスを失ったら、Androidは自動的にキーボードを閉じます。その後、
EditText editText = (EditText) findViewById(R.id.textbox);
OnFocusChangeListener ofcListener = new MyFocusChangeListener();
editText.setOnFocusChangeListener(ofcListener);
とクラスを追加します:
あなたのOnCreateメソッドでは、このような何か
private class MyFocusChangeListener implements OnFocusChangeListener {
public void onFocusChange(View v, boolean hasFocus){
if(v.getId() == R.id.textbox && !hasFocus) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
Androidはキーボードを非表示にしません。あなたはEditText
がフォーカスを失ったときにキーボードが非表示にしたい場合は、そのイベントに、次のようにメソッドを使用してみてください:
private void hideKeypad() {
EditText edtView = (EditText) findViewById(R.id.e_id);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edtView.getWindowToken(), 0);
}
すばらしい答えありがとう –
は、これを試してみてください、それはあなたの問題を解決しますように。
private void hideKeyboard() {
InputMethodManager mImMan = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
mImMan.hideSoftInputFromWindow(mYourEdttxtName.getWindowToken(), 0);
}
あなたはhere.
あなたはそれを達成するためにdispatchTouchEvent
メソッドをオーバーライドすることができ、この
/**
* Hide keyboard on touch of UI
*/
public void hideKeyboard(View view) {
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
hideKeyboard(innerView);
}
}
if (!(view instanceof EditText)) {
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
hideSoftKeyboard(v);
return false;
}
});
}
}
/**
* Hide keyboard while focus is moved
*/
public void hideSoftKeyboard(View view) {
if (view != null) {
InputMethodManager inputManager = (InputMethodManager) contentsContext_
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (inputManager != null) {
if (android.os.Build.VERSION.SDK_INT < 11) {
inputManager.hideSoftInputFromWindow(view.getWindowToken(),
0);
} else {
if (this.getCurrentFocus() != null) {
inputManager.hideSoftInputFromWindow(this
.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
}
view.clearFocus();
}
view.clearFocus();
}
}
}
をお試しください:
EditTextの場合がフォーカスを得て、イベントの順序トリガーである:(つまり、他のEditTextがフォーカスを失っている場合)、別のEditTextのonFocusChange()
呼ばれるACTION_DOWN
されるボーナスは@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
/**
* It gets into the above IF-BLOCK if anywhere the screen is touched.
*/
View v = getCurrentFocus();
if (v instanceof EditText) {
/**
* Now, it gets into the above IF-BLOCK if an EditText is already in focus, and you tap somewhere else
* to take the focus away from that particular EditText. It could have 2 cases after tapping:
* 1. No EditText has focus
* 2. Focus is just shifted to the other EditText
*/
Rect outRect = new Rect();
v.getGlobalVisibleRect(outRect);
if (!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
v.clearFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
}
return super.dispatchTouchEvent(event);
}
onFocusChange()
メソッドが呼び出されます。私の問題は、この問題に対する
LinearLayout linearLayoutApply=(LinearLayout)rootView.findViewById(id.LinearLayoutApply);
linearLayoutApply.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
{
hideKeyBoard(v);
}
}
});
hideKeyBoard
public void hideKeyBoard(View v)
{
InputMethodManager imm=(InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
}
ソリューションは、すでにhereを発見された(断片で)このコードで解決しました。
アクティビティでDispatchTouchEventを使用しており、すべてのEditTextをFocusChangeイベントまたはTouchイベントのいずれかにフックしません。
これははるかに良い解決策です。次のように
マイXamarinの実装は次のとおりです。
public override bool DispatchTouchEvent(MotionEvent ev)
{
if (ev.Action == MotionEventActions.Down)
{
var text = CurrentFocus as EditText;
if (text != null)
{
var outRect = new Rect();
text.GetGlobalVisibleRect(outRect);
if (outRect.Contains((int) ev.RawX, (int) ev.RawY)) return base.DispatchTouchEvent(ev);
text.ClearFocus();
HideSoftKeyboard();
}
}
return base.DispatchTouchEvent(ev);
}
protected void HideSoftKeyboard()
{
var inputMethodManager = (InputMethodManager) GetSystemService(InputMethodService);
inputMethodManager.HideSoftInputFromWindow(CurrentFocus.WindowToken, 0);
}
だけ
public static void touchScreenAndHideKeyboardOnFocus(View view, final Activity activity) {
if (view instanceof EditText) {
view.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
if(activity != null) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
if (activity.getCurrentFocus() != null) {
inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
}
}
});
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
View innerView = ((ViewGroup) view).getChildAt(i);
touchScreenAndHideKeyboardOnFocus(innerView, activity);
}
}
}
ビューは、あなたのレイアウトのルートビューです..しかし、あなたは別のフォーカスを持っている場合は、注意が必要つの静的メソッドを作成しますあなたの編集文のリスナー..
「強制」とは何ですか? – Hatim
@Hatim upssごめんなさい..私の元の方法.. –
自動的に隠れるはずです。あなたもこれをやろうとしましたか? –
私はそれが私が求めている理由です。 – FWeigl
@Ascorbinそれを駄目にしないでください。アンドロイドはこれを世話します.. – Pragnani