android focus clearfocus - Empêcher EditText de se concentrer au démarrage de l'activité




15 Answers

Le problème actuel est-il que vous ne voulez pas qu'il soit concentré du tout? Ou vous ne voulez pas que le clavier virtuel EditText suite à la focalisation de la commande EditText ? Je ne vois pas vraiment d' EditText ce que EditText concentre sur le démarrage, mais le fait que la fenêtre softInput soit ouverte lorsque l'utilisateur n'a pas explicitement demandé à se focaliser sur le EditText (et ouvre le clavier en conséquence) est certainement un problème.

S'il s'agit du problème du clavier virtuel, consultez la documentation de l' élément AndroidManifest.xml <activity> .

android:windowSoftInputMode="stateHidden" - le cache toujours lors de la saisie de l'activité.

ou android:windowSoftInputMode="stateUnchanged" - ne le modifiez pas (par exemple, ne l' affichez pas s'il n'est pas déjà affiché, mais s'il était ouvert lors de la saisie de l'activité, laissez-le ouvert).

unfocused lose disable

J'ai une Activity sous Android, avec deux éléments:

  1. EditText
  2. ListView

Lorsque mon Activity commence, l' EditText immédiatement le focus (curseur clignotant). Je ne veux pas qu'un contrôle ait le focus d'entrée au démarrage. J'ai essayé:

EditText.setSelected(false);

Pas de chance. Comment puis-je convaincre le EditText de ne pas se sélectionner lui-même au démarrage de l' Activity ?




La seule solution que j'ai trouvée est:

  • Créer un LinearLayout (je ne sais pas si d'autres types de Layout fonctionneront)
  • Définissez les attributs android:focusable="true" et android:focusableInTouchMode="true"

Et le EditText n'aura pas le focus après le démarrage de l'activité




En utilisant les informations fournies par d'autres affiches, j'ai utilisé la solution suivante:

dans la mise en page 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"/>

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

et enfin, dans onResume ()

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

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



Essayez clearFocus() au lieu de setSelected(false) . Chaque vue dans Android possède à la fois la focalisation et la sélection, et je pense que vous souhaitez simplement clarifier la mise au point.




Aucune de ces solutions n'a fonctionné pour moi. La façon dont je corrige l'autofocus était:

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



Vous pouvez simplement définir "focusable" et "focusable en mode tactile" sur la valeur true du premier TextView de la layout . De cette façon, lorsque l'activité commencera, le TextView sera concentré mais, en raison de sa nature, rien ne sera concentré sur l'écran et, bien sûr, aucun clavier ne sera affiché ...




Je devais effacer le focus de tous les domaines par programmation. Je viens d'ajouter les deux déclarations suivantes à la définition de ma mise en page principale.

myLayout.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
myLayout.setFocusableInTouchMode(true);

C'est tout. Correction de mon problème instantanément. Merci Silver pour m'avoir orienté dans la bonne direction.




La réponse la plus simple, ajoutez simplement ceci dans la mise en page parent du XML.

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



Essayez ceci avant votre premier champ éditable:

<TextView  
        android:id="@+id/dummyfocus" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:text="@string/foo"
        />

----

findViewById(R.id.dummyfocus).setFocusableInTouchMode(true);
findViewById(R.id.dummyfocus).requestFocus();



En retard, mais peut-être utile. Créez un EditText factice en haut de votre présentation, puis appelez myDummyEditText.requestFocus() dans onCreate()

<EditText android:id="@+id/dummyEditTextFocus" 
android:layout_width="0px"
android:layout_height="0px" />

Cela semble se comporter comme je l'espère. Pas besoin de gérer les changements de configuration, etc. J'avais besoin de cela pour une activité avec une longue TextView (instructions).




Oui, j'ai fait la même chose: créer une mise en page linéaire factice qui obtienne le focus initial. De plus, j'ai défini les identifiants de focus suivants pour que l'utilisateur ne puisse plus le focaliser après un défilement initial:

<LinearLayout 'dummy'>
<EditText et>

dummy.setNextFocusDownId(et.getId());

dummy.setNextFocusUpId(et.getId());

et.setNextFocusUpId(et.getId());

beaucoup de travail juste pour se débarrasser de l'accent sur une vue ..

Merci




Pour moi, ce qui a fonctionné sur tous les appareils est le suivant:

    <!-- fake first focusable view, to allow stealing the focus to itself when clearing the focus from others -->

    <View
    android:layout_width="0px"
    android:layout_height="0px"
    android:focusable="true"
    android:focusableInTouchMode="true" />

Il suffit de mettre cela comme une vue avant la vue problématique, et c'est tout.




La chose la plus simple que j'ai faite est de mettre l'accent sur une autre vue dans onCreate:

    myView.setFocusableInTouchMode(true);
    myView.requestFocus();

Cela a empêché le clavier logiciel d'apparaître et il n'y avait aucun curseur clignotant dans EditText.




<TextView
    android:id="@+id/TextView01"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:marqueeRepeatLimit="marquee_forever"
    android:focusable="true"
    android:focusableInTouchMode="true"
    style="@android:style/Widget.EditText"/>



Vous pouvez y parvenir en créant un EditText factice avec une largeur et une hauteur de mise en 0dp définies sur 0dp et en demandant le focus à cette vue. Ajoutez l'extrait de code suivant dans votre mise en page XML:

<EditText
    android:id="@+id/editText0"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:hint="@string/dummy"
    android:ems="10" 
    >
     <requestFocus />
    </EditText>



Related