92 votes

Comment désactiver la popup du clavier lors de l'édition d'un texte ?

Dans mon application, la première vue de tous mes écrans est un EditText, donc chaque fois que je vais sur un écran, le clavier à l'écran s'affiche. Comment puis-je désactiver ce popingup et l'activer lorsque l'on clique manuellement sur l'EditText ????.

    eT = (EditText) findViewById(R.id.searchAutoCompleteTextView_feed);

    eT.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {

            if(hasFocus){
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
            imm.hideSoftInputFromWindow(eT.getWindowToken(), 0);
            }
        }
    });

code xml :

<ImageView
    android:id="@+id/feedPageLogo"
    android:layout_width="45dp"
    android:layout_height="45dp"
    android:src="@drawable/wic_logo_small" />

<Button
    android:id="@+id/goButton_feed"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:text="@string/go" />

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_toLeftOf="@id/goButton_feed"
    android:layout_toRightOf="@id/feedPageLogo"
    android:hint="@string/search" />

<TextView
    android:id="@+id/feedLabel"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/feedPageLogo"
    android:gravity="center_vertical|center_horizontal"
    android:text="@string/feed"
    android:textColor="@color/white" />

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ButtonsLayout_feed"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true" >

    <Button
        android:id="@+id/feedButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/feed"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/iWantButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/iwant"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/shareButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/share"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/profileButton_feed"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:layout_margin="0dp"
        android:layout_weight="1"
        android:background="@color/white"
        android:text="@string/profile"
        android:textColor="@color/black" />
</LinearLayout>

<ListView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/feedListView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_above="@id/ButtonsLayout_feed"
    android:layout_below="@id/feedLabel"
    android:textSize="15dp" >
</ListView>

la troisième vue (EditText) est celle où se trouve le focus.

182voto

Skynet Points 2839

La meilleure solution réside dans le fichier Project Manifest (AndroidManifest.xml) ajoutez l'attribut suivant dans l'élément activity construire

Android:windowSoftInputMode="stateHidden" (mode d'entrée souple)


Ejemplo:

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

Description :

  • L'état du clavier programmable - s'il est caché ou visible - lorsque l'activité devient le centre d'attention de l'utilisateur.
  • L'ajustement apporté à la fenêtre principale de l'activité - qu'elle soit redimensionnée pour faire de la place au clavier programmable ou que son contenu soit modifié pour rendre visible le point focal actuel lorsqu'une partie de la fenêtre est couverte par le clavier programmable.

Introduit dans :

  • Niveau 3 de l'API.

Lien vers les docs

Note : Les valeurs définies ici (autres que "stateUnspecified" et "adjustUnspecified") remplacent les valeurs définies dans le thème.

84voto

Unknown Points 761

Vous devez créer une vue, au-dessus de l'EditText, qui prend un "faux" focus :

Quelque chose comme :

<!-- Stop auto focussing the EditText -->
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@android:color/transparent"
    android:focusable="true"
    android:focusableInTouchMode="true">
</LinearLayout>

<EditText
    android:id="@+id/searchAutoCompleteTextView_feed"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:inputType="text" />

Dans ce cas, j'ai utilisé un LinearLayout pour demander le focus. J'espère que cela vous aidera.

Cela a fonctionné parfaitement...merci à Zaggo0

45voto

Matthew556 Points 483
     edittext.setShowSoftInputOnFocus(false);

Vous pouvez désormais utiliser le clavier personnalisé de votre choix.

23voto

A.B. Points 843

Les gens ont suggéré beaucoup de bonnes solutions ici, mais j'ai utilisé cette technique simple avec mon EditText (rien en java et AnroidManifest.xml n'est requis). Il suffit de définir votre focusable et focusableInTouchMode à false directement sur EditText.

 <EditText
        android:id="@+id/text_pin"
        android:layout_width="136dp"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:textAlignment="center"
        android:inputType="numberPassword"
        android:password="true"
        android:textSize="24dp"
        android:focusable="false"
        android:focusableInTouchMode="false"/>

Mon intention ici est d'utiliser cette boîte d'édition dans l'activité de verrouillage de l'application où je demande à l'utilisateur de saisir le PIN et je veux montrer mon clavier PIN personnalisé. Testé avec minSdk=8 et maxSdk=23 sur Android Studio 2.1.

enter image description here

20voto

Sonia John Kavery Points 1966

Ajoutez le code ci-dessous dans votre classe d'activité.

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

Le clavier s'affiche lorsque l'utilisateur clique sur l'EditText.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X