So wird EditText beim Erstellen von Aktivitäten nicht fokussiert


68

Ich habe die anderen Fragen gelesen, die dies diskutieren, und alle funktionieren für meine Layouts, mit Ausnahme der allerersten, die erstellt wurden.

Im Moment steht dies ganz oben auf meiner onCreateMethode:

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

^ Das macht es so, dass zumindest die Tastatur beim Start nicht auftaucht, aber die EditTextist immer noch fokussiert.

Dies ist das XMLfür meine EditText:

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30" >
</EditText>

So sieht es aus, wenn ich meine Tätigkeit aufbringe:

Geben Sie hier die Bildbeschreibung ein

Das Problem ist, dass einige Telefone, wenn sie EditTextso fokussiert sind, nicht darin schreiben können. Ich möchte, dass es sich nicht konzentriert.

Was ich getan habe, funktioniert für die nächsten Layouts, die darin erwähnt werden, dass sie EditTextsnicht fokussiert sind und eher so aussehen würden:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie jedoch, dass es sich um dasselbe Layout handelt. Dies ist der Bildschirm, nachdem der Benutzer zu diesem Bildschirm zurückgekehrt ist, was nichts Falsches an dem anzeigen würde, XMLda dies derselbe ist XML, aber das Problem ist, dass der EditTextnur beim Erstellen der Aktivität im Mittelpunkt steht.

Ich habe recherchiert und alle anderen Fragen helfen mir dabei nicht (sie haben jedoch geholfen, dass die Tastatur zum Glück nicht angezeigt wurde). Wie kann ich es schaffen, dass der EditTextStart beim Start eher wie der zweite als der erste Screenshot aussieht?


2
Haben Sie versucht , android:focusable="false"in EditText?
Pratik Butani

@PratikButani, das macht es so, dass es nie konzentriert werden kann.
Michael Yaworski

Das Hinzufügen android:focusableInTouchMode="true"zu meinem übergeordneten Layout funktioniert für mich.
Marcelo Gracietti

Antworten:


300

Sie können die Eigenschaft von Layout wie android:descendantFocusability="beforeDescendants"und festlegenandroid:focusableInTouchMode="true"

Beispiel:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/mainLayout"
  android:descendantFocusability="beforeDescendants"
  android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/password"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/changePass"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="167dp"
        android:ems="10"
        android:imeOptions="flagNoExtractUi"
        android:inputType="textPassword"
        android:maxLength="30" >
    </EditText>

</RelativeLayout>

Möge dies hilfreich sein;)


18

XML-Code:

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:focusable="false"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30" >
</EditText>

Java-Code:

EditText edPwd = (EditText)findViewById(R.id.password);
edtPwd.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            v.setFocusable(true);
            v.setFocusableInTouchMode(true);
            return false;
        }
    });

setze focusable false in xml und setze es true über den Code


Gute Lösung ... Die Antwort mit den richtigen Ergebnissen führt dazu, dass die IME-Option actionNextvollständig fehlschlägt.
YS

Ich habe es zuerst versucht, es hat nicht funktioniert, mein schlechtes, ich habe auf einem Emulator ohne Touchscreen getestet. Auf einem echten Gerät funktioniert es wie ein Zauber. Danke @Meher
Syeda Zunaira

12

Fügen Sie in Ihrem main_layout diese 2 Zeilen hinzu:

android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

Beispiel:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"> *YOUR LAYOUT CODE* </RelativeLayout>

1
Text bearbeiten ist nicht fokussiert, aber die Tastatur ist sichtbar.
Viper

2

Fügen Sie dies in onCreate () hinzu

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

oder in onCreateView ()

 getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

2

Die beste Lösung finden Sie hier: https://stackoverflow.com/a/45139132/3172843

Die richtige und einfache Lösung besteht darin, setFocusable false und setFocusableInTouchMode true festzulegen . Daher wird der EditText nur dann fokussiert, wenn der Benutzer diesen EditText berührt

android:focusable="false"
android:focusableInTouchMode="true"

1

XML-Code

<EditText 
    android:imeOptions="flagNoExtractUi"
    android:focusable="false"
    />

Java-Code in onClickListerner

 mEdtEnterPhoneNumber.setFocusable(true);
    mEdtEnterPhoneNumber.setFocusableInTouchMode(true);

0

Sie können dies programmgesteuert tun. Verwenden Sie editText.setEnabled(false)in Ihrer onStart()Methode Ihre Aktivität (nicht in onCreate () - da dies eine Methode zum Initialisieren von GUI-Komponenten ist.)


Dies würde den EditText vollständig deaktivieren, was nicht erforderlich ist. Ich bin mir nicht sicher (weil ich nicht getestet habe), aber ich denke auch nicht, dass das Deaktivieren und erneute Aktivieren funktionieren würde. Stellen Sie sicher, dass Sie die Frage verstehen, es sei denn, mir fehlt etwas.
Michael Yaworski

0

Es ist möglich, es android:focusable="false"zu deaktivieren, aber wenn dies aus irgendeinem Grund nicht funktioniert, können Sie einfach ein setzen LinearLayoutund es wird den Fokus übernehmen, ohne Ihr Layout zu stören.

HINWEIS: Eclipse gibt eine Fehlermeldung aus, dass Ihr LinearLayoutBenutzer unbrauchbar ist, da er keinen Inhalt enthält. Sie sollten in der Lage sein, es ohne Probleme zu ignorieren.

Zum Beispiel:

<LinearLayout
    android:focusable="true"
    android:focusableInTouchMode="false"
    android:layout_width="0dp"
    android:layout_height="0dp"
    />
<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30" >
</EditText>
</LinearLayout>

0

Der einfachste Weg ist das Hinzufügen

android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

im Aktivitäts-Tag der Datei Manifest.xml


0

1) Es ist am einfachsten, öffnen Sie das Manifest und setzen Sie den folgenden Code zwischen das Aktivitäts-Tag:

android:windowSoftInputMode="stateHidden"

2) Fügen Sie diese Attribute in das übergeordnete Layout ein

android:focusable="true" 
android:focusableInTouchMode="true"

0

Kopieren Sie im Manifest den folgenden Code und fügen Sie ihn ein.

 <activity
   android:name=".LoginActivity"
   android:windowSoftInputMode="stateAlwaysHidden"/>

0
<activity
            android:name=".MainActivity"
            android:windowSoftInputMode="stateAlwaysHidden" />

android: windowSoftInputMode = "stateAlwaysHidden"

Fügen Sie diese Zeile in das Aktivitäts-Tag der Datei Manifest.xml ein. Wenn Sie auf den EditText klicken, wird die Tastatur scharfgestellt.


-7

Verwendung android:focusable="false" zur Fokussierung disable

<EditText
    android:id="@+id/password"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/changePass"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="167dp"
    android:ems="10"
    android:imeOptions="flagNoExtractUi"
    android:inputType="textPassword"
    android:maxLength="30"
 android:focusable="false" >

</EditText>

es funktioniert, aber das macht es so, dass es selbst nach dem Berühren niemals fokussiert werden kann.
Michael Yaworski

Sie können Ereignis-Listener verwenden, wenn Sie es fokussierbar machen müssen
Mohammod Hossain

Bearbeiten Sie Ihre Antwort, um das zu haben, und ich werde Sie abstimmen. Jemand hat jedoch bereits mit dem geantwortet, was Sie gesagt haben.
Michael Yaworski
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.