web-dev-qa-db-fra.com

Désactiver l'autofocus sur le texte modifié

J'ai un texte édité:

   <LinearLayout Android:id="@+id/linearLayout7" Android:layout_width="match_parent" Android:layout_height="wrap_content">
        <EditText Android:layout_height="wrap_content" Android:layout_width="wrap_content" Android:layout_weight="1" Android:id="@+id/editText1" Android:text="3">
            <requestFocus></requestFocus>
        </EditText>
        <Button Android:text="Button" Android:layout_height="wrap_content" Android:layout_width="wrap_content" Android:id="@+id/button2"></Button>
    </LinearLayout>

et puis d'autres choses sous

Le problème que j'ai est que dès que l'application démarre, l'accent est mis sur l'entrée, je ne veux pas que l'accent soit mis sur l'entrée dès le démarrage de l'application.

J'ai essayé d'enlever le 

<requestFocus></requestFocus>

chose et il n'a rien fait.

42
Saad

Ajoutez les éléments Android:focusable="true" et Android:focusableInTouchMode="true" dans la disposition parente de EditText as follow;

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/linearLayout7" Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:focusable="true" Android:focusableInTouchMode="true">

Je pense que cela devrait vous aider.

110
Mudassir

NON Plus de travail ... ajoutez simplement Android: windowSoftInputMode = "stateAlwaysHidden" À la balise d’activité du fichier Manifest.xml.

5
Nishanth S Babu

Si vous voulez effacer le focus par défaut sur le texte modifié, utilisez les 2 attributs suivants

Android:focusable="false"
 Android:focusableInTouchMode="true"

à l'intérieur de la mise en page linéaire parent.

par exemple:

<LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:focusable="false"
            Android:focusableInTouchMode="true"
            Android:orientation="vertical">


     <EditText
         Android:layout_width="match_parent"
         Android:layout_height="wrap_content"
         Android:hint="email id"
         Android:inputType="textEmailAddress"
         Android:maxLines="1"
    />

</LinearLayout>

Si vous souhaitez masquer le clavier lors de la création d'une activité, utilisez ces attributs dans la balise d'activité du fichier manifeste Par exemple:

 <activity
     Android:configChanges="screenSize|orientation|keyboardHidden"
     Android:screenOrientation="portrait"
     Android:name=".activities.LoginActivity"
     Android:windowSoftInputMode="stateHidden|adjustResize"/>

Si vous voulez masquer le clavier lors d’un clic sur un bouton ou lorsqu’un événement survient, utilisez le code suivant 

 public void onClick(View v) {
                try {
                    //InputMethodManager is used to hide the virtual keyboard from the user after finishing the user input
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm.isAcceptingText()) {
                        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
                    }
                } catch (NullPointerException e) {
                    Log.e("Exception", e.getMessage() + ">>");
                }
                    }
                } catch (NullPointerException e) {
                    Log.e("Exception", e.getMessage() + ">>");
                }

Si vous souhaitez supprimer le focus de la modification des champs de texte après avoir quitté l'activité 

@Override
    protected void onResume() {
        super.onResume();
        mEmail.clearFocus();
        mPassword.clearFocus();
}

Et enfin, si vous souhaitez effacer les données dans les champs de texte d'édition lors de la soumission du formulaire, utilisez 

 @Override
    protected void onResume() {
        super.onResume();
        mEmail.getText().clear();
        mPassword.getText().clear();
    }
4
krishna murthy

Vous pouvez utiliser le mode de saisie logicielle de fenêtre masqué pour masquer le clavier et Android:focusable="false" et Android:focusableInTouchMode="true".

<activity
    Android:name=".MainActivity"
    Android:windowSoftInputMode="stateHidden"
    Android:label="@string/app_name"
    >

    <intent-filter>
        <action Android:name="Android.intent.action.MAIN" />
        <category Android:name="Android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
2
Manish Singh
<LinearLayout 
    Android:focusable="true"
    Android:focusableInTouchMode="true" 
    Android:layout_width="0px"
    Android:layout_height="0px" />

 <EditText Android:text="" 
    Android:id="@+id/EditText01"
    Android:layout_width="wrap_content" 
    Android:layout_height="wrap_content"
    Android:hint="@string/hint">
 </EditText>

Aucun autre codage nécessaire, c'est une solution simple et claire.

2
MahmutKarali
<EditText
        Android:id="@+id/input"
        Android:layout_width="0dp"
        Android:layout_height="48dp"
        Android:focusable="false"
        Android:focusableInTouchMode="false" />

detailInputView = (EditText) debugToolsView.findViewById(R.id.input);
    detailInputView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            detailInputView.setFocusable(true);
            detailInputView.setFocusableInTouchMode(true);
            return false;
        }
    });
1
Jack Xu

essayez ce code dans LinearLayout

 <LinearLayout
        Android:focusable="true"
        Android:focusableInTouchMode="true"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

        <EditText

            Android:hint="Search..."
            Android:drawableRight="@drawable/ic_search"
            Android:id="@+id/search_tab_hotbird_F"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content" />

        <Android.support.v7.widget.RecyclerView
            Android:id="@+id/recyHotbird_F"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:padding="4dp">

        </Android.support.v7.widget.RecyclerView>

    </LinearLayout>
1
Azad Qaderzadeh

Hei Lee ,

Il y a plusieurs façons de faire cela, Mudassir vous a donné le moyen de le faire.

Si l'idée ne fonctionne pas, alors faites simplement une chose simple-

Dans votre AndroidManifest>Activity, ajoutez ce code simple:

Android:windowSoftInputMode="stateHidden"

Rien ne doit être fait dans EditText en XML, tout sera un travail et aucun focus n'apparaîtra.

Regardez l'exemple de code de la vraie vie:

<activity
        Android:name=".MainActivity"
        Android:windowSoftInputMode="stateHidden"
        Android:label="@string/app_name"
        >

        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>
0

Ajoutez simplement ce qui suit à la balise XML de votre vue de présentation principale:

 Android:focusableInTouchMode="true"
0
S bruce