Ich habe eine EditText
und Schaltfläche am unteren Rand der Eltern ausgerichtet.
Wenn ich Text eingebe und die Taste zum Speichern von Daten drücke, verschwindet die virtuelle Tastatur nicht.
Kann mir jemand zeigen, wie man die Tastatur versteckt?
Ich habe eine EditText
und Schaltfläche am unteren Rand der Eltern ausgerichtet.
Wenn ich Text eingebe und die Taste zum Speichern von Daten drücke, verschwindet die virtuelle Tastatur nicht.
Kann mir jemand zeigen, wie man die Tastatur versteckt?
Antworten:
Das sollte funktionieren.
InputMethodManager inputManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
Stellen Sie einfach sicher, dass this.getCurrentFocus () nicht null zurückgibt, was der Fall wäre, wenn nichts den Fokus hat.
Möglicherweise möchten Sie auch die imeOptions im EditText definieren. Auf diese Weise verschwindet die Tastatur, sobald Sie auf Fertig drücken:
<EditText
android:id="@+id/editText1"
android:inputType="text"
android:imeOptions="actionDone"/>
onEditorAction([...])
. Durch die Rückkehr true
wird verhindert, dass sich die Tastatur korrekt versteckt.
android:singleLine="true"
.
android:singleLine="true"
es ist veraltet und es funktioniert nicht mit maxLines=1
. Irgendwelche Ideen?
singleLine
wurde ersetzt durch maxLines=1
. Sollte wie vorgesehen funktionieren. Erstellen Sie eine separate Frage, wenn dies nicht der Fall ist.
mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// do something, e.g. set your TextView here via .setText()
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true;
}
return false;
}
});
und in xml
android:imeOptions="actionDone"
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Ich habe niemanden mit dieser Methode gesehen:
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean focused) {
InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
if (focused)
keyboard.showSoftInput(editText, 0);
else
keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
});
Und dann fordern Sie einfach den Fokus auf den editText an:
editText.requestFocus();
Die im EditText-Aktionslistener enthaltene Lösung:
public void onCreate(Bundle savedInstanceState) {
...
...
edittext = (EditText) findViewById(R.id.EditText01);
edittext.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
}
return false;
}
});
...
...
}
Ich habe dies gefunden, weil mein EditText bei der Eingabe nicht automatisch entlassen wurde.
Dies war mein ursprünglicher Code.
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN ))) {
// Do stuff when user presses enter
return true;
}
return false;
}
});
Ich habe es gelöst, indem ich die Linie entfernt habe
return true;
nachdem Sie Dinge getan haben, wenn der Benutzer die Eingabetaste drückt.
Hoffe das hilft jemandem.
Schreiben Sie einfach diese beiden Codezeilen auf, in denen die Eingabeoption funktioniert.
InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
Ich habe in den letzten Tagen damit zu kämpfen und eine Lösung gefunden, die wirklich gut funktioniert. Die Softtastatur wird ausgeblendet, wenn eine Berührung außerhalb des EditText ausgeführt wird.
Hier geposteter Code: Standardtastatur beim Klicken in Android ausblenden
Oben sehen Sie eine markierte Antwort. Aber ich habe es benutzt getDialog().getCurrentFocus()
und gut gearbeitet. Ich "this"
poste diese Antwort, weil ich meinen oncreatedialog nicht eingeben kann.
Das ist also meine Antwort. Wenn Sie eine markierte Antwort versucht haben und nicht funktioniert haben, können Sie dies einfach versuchen:
InputMethodManager inputManager = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getDialog().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
Sie können auf einfache Weise eine Singleton-Klasse für den Aufruf erstellen:
public class KeyboardUtils {
private static KeyboardUtils instance;
private InputMethodManager inputMethodManager;
private KeyboardUtils() {
}
public static KeyboardUtils getInstance() {
if (instance == null)
instance = new KeyboardUtils();
return instance;
}
private InputMethodManager getInputMethodManager() {
if (inputMethodManager == null)
inputMethodManager = (InputMethodManager) Application.getInstance().getSystemService(Activity.INPUT_METHOD_SERVICE);
return inputMethodManager;
}
@SuppressWarnings("ConstantConditions")
public void hide(final Activity activity) {
new Handler().post(new Runnable() {
@Override
public void run() {
try {
getInputMethodManager().hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
} catch (NullPointerException e) {
e.printStackTrace();
}
}
});
}
}
Also, nachdem kann in der Aktivität wie das nächste Formular aufgerufen werden:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
KeyboardUtils.getInstance().hide(this);
}
}
Ich benutze diese Methode, um die Tastatur aus dem Bearbeitungstext zu entfernen:
public static void hideKeyboard(Activity activity, IBinder binder) {
if (activity != null) {
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (binder != null && inputManager != null) {
inputManager.hideSoftInputFromWindow(binder, 0);//HIDE_NOT_ALWAYS
inputManager.showSoftInputFromInputMethod(binder, 0);
}
}
}
Und diese Methode zum Entfernen der Tastatur aus der Aktivität (funktioniert in einigen Fällen nicht - wenn beispielsweise edittext, an die die Tastatur gebunden ist, den Fokus verliert, funktioniert sie nicht. In anderen Situationen funktioniert sie jedoch hervorragend, und Sie haben sie nicht sich um ein Element zu kümmern, das die Tastatur hält)
public static void hideKeyboard(Activity activity) {
if (activity != null) {
InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
if (activity.getCurrentFocus() != null && inputManager != null) {
inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
inputManager.showSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0);
}
}
}
int klavStat = 1; // for keyboard soft/hide button
int inType; // to remeber your default keybort Type
editor - ist das EditText-Feld
/// metod for onclick button ///
public void keyboard(View view) {
if (klavStat == 1) {
klavStat = 0;
inType = editor.getInputType();
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
editor.setInputType(InputType.TYPE_NULL);
editor.setTextIsSelectable(true);
} else {
klavStat = 1;
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
editor.setInputType(inType);
}
}
Wenn Sie ein anderes EditText-Feld haben, müssen Sie auf Fokusänderungen achten
In meinem Fall habe ich, um die Tastatur beim Drücken der "Senden-Taste" auszublenden, die akzeptierte Antwort verwendet, aber den Kontext in getApplication geändert und getWindow () hinzugefügt.
InputMethodManager inputManager = (InputMethodManager) getApplication().getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
editText.setInputType(InputType.TYPE_NULL);