Ich möchte in der Lage sein, den Fokus vom EditText zu entfernen. Wenn zum Beispiel die Tastatur erscheint und der Benutzer sie mit der Zurück-Taste ausblendet, möchte ich, dass der Fokus und der Cursor verschwinden. Wie lässt sich das bewerkstelligen?
Antworten
Zu viele Anzeigen?Dies ist meine allererste Antwort auf SO, also seid nicht zu streng mit mir, wenn ich Fehler habe :D
Es gibt nur wenige Antworten im SO, aber ich habe das Bedürfnis, meine vollständige Lösung zu posten, weil mich das verrückt gemacht hat. Ich habe Teile und Stücke von überall her zusammengeklaubt, also verzeiht mir, wenn ich nicht jedem die entsprechende Anerkennung zuteil werden lasse... :)
(Ich werde mein Ergebnis vereinfachen, weil meine Ansicht zu viele Elemente hat und ich nicht damit spammen will und versuchen werde, sie so allgemein wie möglich zu gestalten...)
Für Ihr Layout benötigen Sie ein Elternteil Ihr EditText et übergeordnete Ansicht etwa so definiert:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/lytContainer"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true">
<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/etEditor"
android:inputType="number"
android:layout_gravity="center"
android:hint="@string/enter_your_text"
android:textColor="@android:color/darker_gray"
android:textSize="12dp"
android:textAlignment="center"
android:gravity="center"
android:clickable="true"/>
</LinearLayout>
Ich brauchte also ein paar Dinge hier. Ich brauchte einen Platzhalter für meinen EditText - das ist das -.
Android:hint="hint"
Auch,
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"
machte es möglich für EditText nicht auf den Eintritt in die Tätigkeit und später in der Tätigkeit selbst bei der Einstellung hilft diese Einstellung, damit Sie die onTouchListener darauf, um den Fokus weg von EditText .
Jetzt, in der Aktivität:
package com.at.keyboardhide;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.LinearLayout;
public class MainActivity extends Activity implements OnTouchListener{
private EditText getEditText;
private LinearLayout getLinearLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
setContentView(R.layout.keyboardmain);
getEditText = (EditText)findViewById(R.id.etEditor);
getLinearLayout = (LinearLayout)findViewById(R.id.lytContainer);
getLinearLayout.setOnTouchListener(this);
getEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
Log.d("EDTA", "text was entered.");
getEditText.clearFocus();
imm.hideSoftInputFromWindow(barcodeNo.getWindowToken(), 0);
return true;
}
return false;
}
});
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v==getLinearLayout){
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0);
getEditText.clearFocus();
return true;
}
return false;
}
}
Ein paar der Antworten für Bits habe ich auf dieser Frageseite gefunden, und den Teil mit der Activity-Lösung habe ich auf dieser Blog . Der Rest, den ich vermisste und den ich selbst herausfinden musste, war der klare Fokus auf die EditText die ich sowohl innerhalb der setOnEditorActionListener und onTouchLister für die übergeordnete Ansicht .
Ich hoffe, das hilft jemandem und spart ihm Zeit :)
Zum Wohl, Z.
In den Kommentaren haben Sie gefragt, ob eine andere Ansicht anstelle des EditTextes fokussiert werden kann. Ja, das ist möglich. Verwenden Sie .requestFocus()
Methode für die Ansicht, die am Anfang fokussiert werden soll (in der onCreate()-Methode)
Auch die Fokussierung einer anderen Ansicht spart einiges an Code. (Code für das Ausblenden der Tastatur zum Beispiel)
Ich hatte das gleiche Problem. Es hat mich mehr als verrückt gemacht.
Ich hatte einen erweiterten Dialog mit einem ScrollView, der ein TableLayout mit erweitertem LinearLayout hatte, das eine SeekBar und einen EditText enthielt.
Der erste EditText hatte nach dem Anzeigen des Dialogs immer den Autofokus und nach dem Beenden der Bearbeitung des Textes über die Tastatur hatte der EditText immer noch den Fokus und die Tastatur war immer noch sichtbar.
Ich habe fast alle Lösungen in diesem Thread ausprobiert, aber keine hat bei mir funktioniert.
Hier also mein einfache Lösung : (Text = EditText)
text.setOnEditorActionListener( new OnEditorActionListener( ){
public boolean onEditorAction( TextView v, int actionId, KeyEvent event ){
if( (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) ||
(actionId == EditorInfo.IME_ACTION_DONE) ){
text.clearFocus( );
InputMethodManager iMgr = null;
iMgr = (InputMethodManager)mContext.getSystemService( Context.INPUT_METHOD_SERVICE );
iMgr.hideSoftInputFromWindow( text.getWindowToken(), 0 );
}
return true;
}
});
Übrigens, ich hat nicht einen der folgenden Schnipsel zur Lösung des Problems verwendet:
//setFocusableInTouchMode( true )
//setFocusable( true )
//setDescendantFocusability( ViewGroup.FOCUS_BEFORE_DESCENDANTS )
UND I hat nicht ein Abstandselement wie eine Ansicht mit einer Breite und Höhe von 1dp verwendet.
Hoffentlich hilft es jemandem :D
0 Stimmen
Gibt es eine andere Ansicht, die nach EditText fokussiert werden kann?
0 Stimmen
Ist es möglich, eine WebView zu fokussieren?
0 Stimmen
Siehe meine Antwort hier: stackoverflow.com/questions/3890033/
5 Stimmen
Schau dir das an stackoverflow.com/questions/1555109/
0 Stimmen
Einzeiliger Code stackoverflow.com/a/46580242/6611895
0 Stimmen
Zum Entfernen des Cursors aus dem zu bearbeitenden Text editText.setCursorVisible(false);