it-swarm.com.de

Automatisches Aufklappen der Tastatur beim Start Aktivität

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?

92
Galip

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.

202
Vikas Patidar

Sie können dies zu Ihrer Android Manifest-Aktivität hinzufügen: 

Android:windowSoftInputMode="stateHidden|adjustResize"
94
Mobile Bloke

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"

Ich denke, das ist der einfache Weg, auch wenn Sie fragments verwenden.

"stateAlwaysHidden" Die Soft-Tastatur ist immer ausgeblendet, wenn die Das Hauptfenster der Aktivität hat einen Eingabefokus.

30
Elenasys

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 :)

11
Sid

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

4
Brent Young

Verwenden Sie dies im Code Ihrer Aktivität:

@Override
public void onCreate(Bundle savedInstanceState) {

getWindow().setSoftInputMode(
   WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

}
3
Bobs

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.

3
Zekitez
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);
3
Sreelal S

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. 

2
Salman Nazir

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.

1
Steve Waring

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.

1
Kaushik NP

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;
                }});
1
Paul Roosens

Android: windowSoftInputMode = "stateHidden | adjustResize"

Funktioniert gut

0
Softlabsindia

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 :)

0
Yogesh Rathi

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"/>
0
Aabauser

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

0

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 ..

0
Mtl Dev