Ich habe eine relativ einfache Frage. Ich habe eine Aktivität mit vielen EditText's darin. Wenn ich die Aktivität öffne, wird automatisch der erste EditText angezeigt und die virtuelle Tastatur angezeigt.
Wie kann ich das verhindern?
Verwenden Sie diese Attribute in Ihrem Layout-Tag in der XML-Datei:
Android:focusable="true"
Android:focusableInTouchMode="true"
Wie von anderen Mitgliedern in Kommentaren berichtet, funktioniert es nicht für ScrollView
. Daher müssen Sie diese Attribute zum Hauptkind von ScrollView
hinzufügen.
Sie können dies zu Ihrer Android Manifest-Aktivität hinzufügen:
Android:windowSoftInputMode="stateHidden|adjustResize"
Ich habe hier mehrere Implementierungen beschrieben, aber jetzt habe ich in den AndroidManifest.xml
für meine Activity
die Eigenschaft hinzugefügt:
Android:windowSoftInputMode="stateAlwaysHidden"
fragments
verwenden."stateAlwaysHidden" Die Soft-Tastatur ist immer ausgeblendet, wenn die Das Hauptfenster der Aktivität hat einen Eingabefokus.
Wenn Sie eine andere Sicht auf Ihre Aktivität haben, z. B. eine ListView
, können Sie auch Folgendes tun:
ListView.requestFocus();
in Ihrem onResume (), um den Fokus von der editText
zu nehmen.
Ich weiß, dass diese Frage beantwortet wurde, aber nur eine alternative Lösung bereitstellt, die für mich funktioniert hat :)
https://stackoverflow.com/a/11627976/5217837 Das ist fast richtig:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
Es sollte jedoch SOFT_INPUT_STATE_HIDDEN und nicht SOFT_INPUT_STATE_ALWAYS_VISIBLE sein
Verwenden Sie dies im Code Ihrer Aktivität:
@Override
public void onCreate(Bundle savedInstanceState) {
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
Ich hatte ein ähnliches Problem, selbst wenn die Tabs gewechselt wurden, sprang die Tastatur automatisch auf und blieb mit Android 3.2.1 auf einem Tablet. Verwenden Sie die folgende Methode:
public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
searchEditText.setCursorVisible(isFocused);
searchEditText.setFocusable(isFocused);
searchEditText.setFocusableInTouchMode(isFocused);
if (isFocused) {
searchEditText.requestFocus();
} else {
InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
}
}
In onCreate () und onPause () der Aktivität für jeden EditText:
setEditTextFocus (myEditText, false);
Für jeden EditText einen OnTouchListener:
myEditText.setOnTouchListener(new EditText.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
setEditTextFocus(myEditText, true);
return false;
}
});
Für jedes EditText
in dem OnEditorActionListener
:
myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
.......
setEditTextFocus(myEditText, false);
return false;
}
});
Und für jedes EditText
im layout xml
:
Android:imeOptions="actionDone"
Android:inputType="numberDecimal|numberSigned" // Or something else
Möglicherweise ist mehr Codeoptimierung möglich.
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);
Ich habe diese einfache Lösung gefunden, die für mich funktioniert hat. Legen Sie diese Attribute in Ihrem übergeordneten Layout fest:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/mainLayout"
Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true" >
Wenn jetzt die Aktivität beginnt, wird dieses Hauptlayout standardmäßig fokussiert.
Außerdem können wir zur Laufzeit den Fokus aus den untergeordneten Ansichten entfernen, indem Sie den Fokus wieder auf das Hauptlayout setzen.
findViewById(R.id.mainLayout).requestFocus();
Ich hoffe es funktioniert für Sie.
Interessanterweise wird in dieser Dokumentation https://developer.Android.com/training/keyboard-input/visibility.html angegeben, dass beim Starten einer Aktivität und bei Fokus auf ein Textfeld die Soft-Tastatur nicht angezeigt wird (und fährt dann fort, um zu zeigen, wie die Tastatur angezeigt wird, wenn Sie etwas Code wünschen.
Auf meinem Samsung Galaxy S5 funktioniert meine App (ohne Manifesteintrag oder speziellen Code) - keine Soft-Tastatur. Bei einem Lollipop AVD wird jedoch eine Softtastatur gezeigt, die gegen das oben angegebene Dokument verstößt.
Wenn dieses Verhalten beim Testen in einer AVD auftritt, möchten Sie möglicherweise ein echtes Gerät testen, um zu sehen, was passiert.
Dies hat einige gute Antworten in dem folgenden Beitrag: Stoppt EditText, um beim Aktivitätsstart den Fokus zu erhalten . Ich verwende regelmäßig den folgenden Code von Morgan :
<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:layout_width="0px"
Android:layout_height="0px"/>
<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView Android:id="@+id/autotext"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:nextFocusUp="@id/autotext"
Android:nextFocusLeft="@id/autotext"/>
HINWEIS: Das Dummy-Element muss vor dem fokussierbaren Element RECHTS platziert werden.
Und ich denke, es sollte auch mit ScrollView perfekt funktionieren und hatte auch hier keine Probleme mit der Zugänglichkeit.
dies ist die Lösung, die ich verwende, ist nicht die beste Lösung, aber sie funktioniert gut für mich
editComment.setFocusableInTouchMode(false);
editComment.setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event)
{
// TODO Auto-generated method stub
editComment.setFocusableInTouchMode(true);
editComment.requestFocus() ;
return false;
}});
Android: windowSoftInputMode = "stateHidden | adjustResize"
Funktioniert gut
Die akzeptierte Antwort funktioniert nicht für mich, Deshalb gibt die Antwort eine funktionierende Lösung. Vielleicht ist es hilfreich!
EditText edt = (EditText) findViewById(R.id.edt);
edt.requestFocus();
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
edt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
Jetzt ist die Tastatur offen :)
Fügen Sie unten in der Aktivitäts-XML den folgenden Code hinzu, und stellen Sie sicher, dass die Ansicht über EditText liegt
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:focusableInTouchMode="true"/>
Android:focusableInTouchMode="true"
Fügen Sie die obige Zeile zu xml von EditText
oder TextInputLayout
hinzu, das den Fokus hat und bewirkt, dass softInputKeyboard
angezeigt wird.
Dies löste das Problem für uns und jetzt erscheint die Tastatur nicht mehr
Dies geschieht, wenn Ihr EditText automatisch den Fokus erhält, wenn Sie mit der Aktivität beginnen. Ein einfacher und stabiler Weg, dies zu beheben, besteht einfach darin, den anfänglichen Fokus auf eine andere Ansicht wie einen Button usw. zu setzen.
Sie können dies in Ihrem Layout-XML tun, es ist kein Code erforderlich ..