Hoe maak je EditText niet gefocust bij het maken van Activiteit

Ik heb de andere vragen gelezen die hierover gaan en ze werken allemaal voor mijn lay-outs, behalvevoor de allereerste die is gemaakt.

Op dit moment staat dit bovenaan mijn onCreate-methode:

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

^ Dat zorgt ervoor dat het toetsenbord in ieder geval niet verschijnt bij het opstarten, maar de EditTextis nog steeds gefocust.

Dit is de XMLvoor mijn 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>

Zo ziet het eruit als ik mijn activiteit ter sprake breng:

voer hier de afbeeldingsbeschrijving in

Het probleem is dat bij sommige telefoons, wanneer een EditTextop deze manier is gefocust, ze er niet in kunnen schrijven. Ik wil dat het nietfocust.

Wat ik heb gedaan, werkt voor de volgende lay-outs die naar voren zijn gebracht, in die zin dat de EditTextsniet zijn gericht op en er meer als volgt uit zou zien:

voer hier de afbeeldingsbeschrijving in

Merk echter op dat het dezelfde lay-out is. Dit is het scherm nadat de gebruiker naar dit scherm is teruggebracht, wat zou aangeven dat er niets mis is met de XMLomdat dit dezelfde XMLis, maar het probleem is dat de EditTextis alleen gericht op wanneer de activiteit is gemaakt.

Ik heb onderzoek gedaan en alle andere vragen helpen me hier niet bij (gelukkig hielpen ze er wel voor dat het toetsenbord niet verscheen). Hoe kan ik ervoor zorgen dat de EditTextbij het opstarten eruitziet als de tweede schermafbeelding, in plaats van de eerste?


Antwoord 1, autoriteit 100%

U kunt de eigenschap van Lay-out instellen zoals android:descendantFocusability="beforeDescendants"en android:focusableInTouchMode="true"

Voorbeeld:

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

Kan deze nuttig zijn;)


Antwoord 2, autoriteit 6%

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;
        }
    });

stel focusable false in xml in en stel het in op true via de code


Antwoord 3, autoriteit 4%

In je main_layout
voeg deze 2 regels toe:

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

voorbeeld:

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

Antwoord 4

Voeg dit toe in onCreate()

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

of in onCreateView()

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

Antwoord 5

de beste oplossing is hier:
https://stackoverflow.com/a/45139132/3172843

de juiste en eenvoudigeoplossing is om setFocusable false en setFocusableInTouchMode true. dus de EditText krijgt alleen focus wanneer de gebruiker die EditText aanraakt

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

Antwoord 6

XML-code

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

Java-code in onClickListerner

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

Antwoord 7

U kunt dit programmatisch doen. gebruik editText.setEnabled(false)in uw onStart()methode van uw activiteit (niet in onCreate() – omdat dit een methode is voor het initialiseren van GUI-componenten)


Antwoord 8

Het is mogelijk om android:focusable="false"te gebruiken om het uit te schakelen, maar als dat om de een of andere reden niet werkt, dan kun je eenvoudig een LinearLayoutplaatsen en het zal de focus nemen zonder uw lay-out te verstoren.

OPMERKING: Eclipse geeft u een foutmelding dat uw LinearLayoutnutteloos is omdat het geen inhoud heeft. Je zou het zonder problemen moeten kunnen negeren.

Bijvoorbeeld:

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

Antwoord 9

De gemakkelijkste manier is om

. toe te voegen

android:windowSoftInputMode="stateAlwaysHidden|adjustPan" 

in de activiteitstag van het Manifest.xml-bestand


Antwoord 10

1) Het is het eenvoudigst, open het manifest en plaats de volgende code tussen de activiteitstag:

android:windowSoftInputMode="stateHidden"

2) Zet ​​deze attributen in de bovenliggende lay-out

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

Antwoord 11

Kopieer en plak in Manifest de onderstaande code.

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

Antwoord 12

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

android:windowSoftInputMode=”stateAlwaysHidden”

voeg deze regel toe aan de activiteitstag van het Manifest.xml-bestand. Wanneer u op EditText klikt, wordt het toetsenbord scherpgesteld.


Antwoord 13

gebruik android:focusable="false"om scherpstelling uit te schakelen

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

Other episodes