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?

Michael Yaworski
quelle
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;)

Pratik Butani
quelle
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

Meher
quelle
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>
avisper
quelle
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);
Sanket Parchande
quelle
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"
faraz khonsari
quelle
1

XML-Code

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

Java-Code in onClickListerner

 mEdtEnterPhoneNumber.setFocusable(true);
    mEdtEnterPhoneNumber.setFocusableInTouchMode(true);
Hai Rom
quelle
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.)

Nicole Conrad
quelle
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>
ThatGuyThere
quelle
0

Der einfachste Weg ist das Hinzufügen

android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

im Aktivitäts-Tag der Datei Manifest.xml

Sudhir singh
quelle
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"
Vincent Mungai
quelle
0

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

 <activity
   android:name=".LoginActivity"
   android:windowSoftInputMode="stateAlwaysHidden"/>
Agilanbu
quelle
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.

pruthwiraj.kadam
quelle
-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>
Mohammod Hossain
quelle
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