wake-up-neo.com

Wie kann man EditText beim Erstellen von Aktivität nicht fokussieren?

Bevor Sie sich abstimmen und als Duplikat markieren, lesen Sie meine Frage.

Ich habe die anderen Fragen gelesen, die das besprechen, und alle funktionieren für meine Layouts, mit Ausnahme von für das allererste, das erstellt wurde.

Im Moment befindet sich dies oben auf meiner onCreate-Methode:

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

^ Das macht es so, dass zumindest die Tastatur beim Start nicht auftaucht, aber die EditText ist immer noch im Fokus.

Dies ist die XML fü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:

enter image description here

Das Problem ist, dass bei einigen Telefonen, wenn eine EditText so eingestellt ist, sie nicht hineinschreiben können. Ich möchte es nicht fokussieren.

Was ich getan habe, funktioniert für die nächsten Layouts, in denen die EditTexts nicht im Fokus steht und eher wie folgt aussehen würde:

enter image description here

Beachten Sie jedoch, dass es sich um dasselbe Layout handelt. Dies ist der Bildschirm, nachdem der Benutzer zu diesem Bildschirm zurückgekehrt ist. Dies bedeutet, dass mit XML kein Fehler vorliegt, da dies derselbe XML ist. Das Problem besteht jedoch darin, dass sich EditText nur auf die Erstellung der Aktivität konzentriert.

Ich habe recherchiert und alle anderen Fragen helfen mir dabei nicht (sie haben jedoch geholfen, dass die Tastatur zum Glück nicht auftaucht). Wie kann ich es so machen, dass die EditText beim Start wie der zweite Screenshot aussieht und nicht der erste?

63

Sie können die Eigenschaft des Layouts wie Android:descendantFocusability="beforeDescendants" und Android:focusableInTouchMode="true" einstellen. 

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 dieser hilfreich sein;)

280
Pratik Butani

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 in xml und über den Code auf true

16
Meher

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>
12
avisper

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

XML-Code

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

Java-Code in onClickListerner

 mEdtEnterPhoneNumber.setFocusable(true);
    mEdtEnterPhoneNumber.setFocusableInTouchMode(true);
1
Hai Rom

die beste Lösung ist hier: https://stackoverflow.com/a/45139132/3172843

die Lösung correct und simple besteht aus setFocusable false und setFocusableInTouchMode true. Der EditText erhält also nur dann den Fokus, wenn der Benutzer diesen EditText berührt

Android:focusable="false"
Android:focusableInTouchMode="true"
1
faraz khonsari

Der einfachste Weg ist das Hinzufügen 

Android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

im Activity-Tag der Datei Manifest.xml

0
Sudhir singh

Es ist möglich, Android:focusable="false" zum Deaktivieren zu verwenden, aber wenn dies aus irgendeinem Grund nicht funktioniert, können Sie einfach eine LinearLayout setzen und den Fokus übernehmen, ohne das Layout zu stören. 

HINWEIS: Eclipse gibt einen Fehler aus, der besagt, dass Ihre LinearLayout unbrauchbar ist, da sie keinen Inhalt hat. Sie sollten es ohne Probleme ignorieren können.

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
ThatGuyThere
<activity
            Android:name=".MainActivity"
            Android:windowSoftInputMode="stateAlwaysHidden" />

Android: windowSoftInputMode = "stateAlwaysHidden"

fügen Sie diese Zeile im Activity-Tag der Datei Manifest.xml hinzu. Wenn Sie auf TextEdit klicken, wird die Tastatur in den Fokus gerückt. 

0

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

 <activity
   Android:name=".LoginActivity"
   Android:windowSoftInputMode="stateAlwaysHidden"/>
0
Agilanbu

1) Es ist am einfachsten, das Manifest zu öffnen und den folgenden Code zwischen das Activity-Tag zu setzen:

Android:windowSoftInputMode="stateHidden"

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

Android:focusable="true" 
Android:focusableInTouchMode="true"
0
Vincent Mungai

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

0
Nicole Conrad