Vraag Stop met EditText om focus te krijgen bij het opstarten van de activiteit


ik heb een Activity in Android, met twee elementen:

  1. EditText 
  2. ListView

Wanneer mijn Activity begint, de EditText heeft onmiddellijk invoerfocus (knipperende cursor). Ik wil geen enkele controle om inputfocus te hebben bij het opstarten. Ik heb geprobeerd:

EditText.setSelected(false);

Geen geluk. Hoe kan ik het overtuigen? EditText om zichzelf niet te selecteren wanneer het Activity begint?


2386
2017-10-12 15:03


oorsprong


antwoorden:


Uitstekende antwoorden van Luc en Mark, maar een goed codevoorbeeld ontbreekt. De tag toevoegen android:focusableInTouchMode="true" naar <LinearLayout> zoals het volgende voorbeeld zal het probleem oplossen.

<!-- 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"/>

2026
2017-11-02 15:49



Is het werkelijke probleem dat je gewoon niet wilt dat het focus heeft? Of u wilt niet dat het virtuele toetsenbord wordt weergegeven als resultaat van het scherpstellen op EditText? Ik zie niet echt een probleem met de EditText met focus op start, maar het is zeker een probleem om het softInput-venster open te hebben wanneer de gebruiker niet expliciet heeft gevraagd om zich te concentreren op de EditText (en open het toetsenbord als resultaat).

Als het probleem van het virtuele toetsenbord zich voordoet, raadpleegt u de AndroidManifest.xml  <activiteit> element documentatie.

android:windowSoftInputMode="stateHidden" - verberg het altijd bij het invoeren van de activiteit.

of android:windowSoftInputMode="stateUnchanged" - verander het niet (bijvoorbeeld niet laten zien het als het nog niet is getoond, maar als het open was toen je de activiteit begon, laat het open).


1565
2018-04-09 21:22



Er is een eenvoudigere oplossing. Stel deze kenmerken in uw bovenliggende lay-out in:

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

En nu, wanneer de activiteit start, krijgt deze hoofdlay-out standaard focus.

We kunnen ook focus verwijderen van onderliggende weergaven tijdens runtime (bijvoorbeeld na het beëindigen van de bewerking van het kind) door opnieuw de focus naar de hoofdlay-out te geven, zoals deze:

findViewById(R.id.mainLayout).requestFocus();

Goede opmerking van Guillaume Perrot:

android:descendantFocusability="beforeDescendants" lijkt het te zijn   standaard (geheel getal is 0). Het werkt gewoon door toe te voegen    android:focusableInTouchMode="true".

Echt waar, we kunnen zien dat het beforeDescendants ingesteld als standaard in de ViewGroup.initViewGroup() methode (Android 2.2.2). Maar niet gelijk aan 0. ViewGroup.FOCUS_BEFORE_DESCENDANTS = 0x20000;

Met dank aan Guillaume.


1012
2017-12-26 23:35



De enige oplossing die ik heb gevonden is:

  • Maak een LinearLayout (Ik weet niet of andere soorten lay-outs wel werken)
  • Stel de attributen in android:focusable="true" en android:focusableInTouchMode="true"

En de EditText krijgt niet de focus na het starten van de activiteit


385
2017-10-23 08:12



Het probleem lijkt te komen van een eigenschap die ik alleen kan zien in de XML form van de lay-out.

Zorg ervoor dat u deze regel verwijdert aan het einde van de verklaring binnen de EditText XML-tags:

<requestFocus />

Dat zou zoiets moeten geven:

<EditText
   android:id="@+id/emailField"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:inputType="textEmailAddress">

   //<requestFocus /> /* <-- without this line */
</EditText>

67
2018-03-13 09:57



met behulp van de informatie die door andere posters werd verstrekt, gebruikte ik de volgende oplossing:

in de layout-XML

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:id="@+id/linearLayout_focus"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="0px"
    android:layout_height="0px"/>

<!-- AUTOCOMPLETE -->
<AutoCompleteTextView
    android:id="@+id/autocomplete"
    android:layout_width="200dip"
    android:layout_height="wrap_content"
    android:layout_marginTop="20dip"
    android:inputType="textNoSuggestions|textVisiblePassword"/>

in onCreate ()

private AutoCompleteTextView mAutoCompleteTextView;
private LinearLayout mLinearLayout;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout);

    //get references to UI components
    mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete);
    mLinearLayout = (LinearLayout) findViewById(R.id.linearLayout_focus);
}

en tenslotte, in onResume ()

@Override
protected void onResume() {
    super.onResume();

    //do not give the editbox focus automatically when activity starts
    mAutoCompleteTextView.clearFocus();
    mLinearLayout.requestFocus();
}

63
2018-05-26 21:07



Het volgende zal ervoor zorgen dat edittext geen focus heeft wanneer deze wordt gemaakt, maar grijp hem wanneer je hem aanraakt.

<EditText
    android:id="@+id/et_bonus_custom"
    android:focusable="false" />

Dus je stelt je focus in op false in de xml, maar de sleutel bevindt zich in de java, die je de volgende luisteraar toevoegt:

etBonus.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        return false;
    }
});

Omdat u false retourneert, d.w.z. de gebeurtenis niet consumeert, zal het focusseergedrag als normaal verlopen.


58
2018-06-15 04:45



Proberen clearFocus () in plaats van setSelected(false). Elke weergave in Android heeft zowel focusbaarheid als selectiviteit en ik denk dat je de focus gewoon wilt opruimen.


54
2017-10-12 19:02



Ik had serval individueel antwoord geprobeerd maar de nadruk ligt nog steeds op de EditText. Ik slaag er alleen in om het op te lossen door samen twee van de bovenstaande oplossingen te gebruiken.

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

(Referentie van Silver https://stackoverflow.com/a/8639921/15695 )

en verwijder

 <requestFocus />

op EditText

(Referentie van floydaddict https://stackoverflow.com/a/9681809 )


43
2017-11-28 10:32



Geen van deze oplossingen werkte voor mij. De manier waarop ik de autofocus repareerde was:

<activity android:name=".android.InviteFriendsActivity" android:windowSoftInputMode="adjustPan">
    <intent-filter >
    </intent-filter>
</activity>

37
2017-11-30 16:37