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.

1voto

Nick Unuchek Points 139
       <TextView android:layout_width="match_parent"
                 android:layout_height="wrap_content"

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

                <requestFocus/>
      </TextView>

      <EditText android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

1voto

Ashish Sinha Points 36

Si vous utilisez Xamarin vous pouvez ajouter ceci

Activity[(WindowSoftInputMode = SoftInput.StateAlwaysHidden)]

Par la suite, vous pouvez ajouter cette ligne dans la méthode OnCreate()

youredittext.ShowSoftInputOnFocus = false;

Si l'appareil ciblé ne prend pas en charge le code ci-dessus, vous pouvez utiliser le code ci-dessous dans l'événement de clic de l'EditText.

InputMethodManager Imm = (InputMethodManager)this.GetSystemService(Context.InputMethodService);
Imm.HideSoftInputFromWindow(youredittext.WindowToken, HideSoftInputFlags.None);

1voto

slogan621 Points 51

J'ai trouvé le modèle suivant qui fonctionne bien pour moi dans un code où je veux afficher une boîte de dialogue pour obtenir l'entrée (par exemple, la chaîne affichée dans le champ de texte est le résultat des sélections faites dans une liste de cases à cocher dans une boîte de dialogue, plutôt que du texte entré via le clavier).

  1. Désactiver la mise au point de la saisie douce sur le champ d'édition. Je ne peux pas le désactiver pour l'ensemble de l'activité, car il y a des champs d'édition pour lesquels je souhaite que le clavier soit utilisé dans la même disposition.
  2. Les premiers clics dans le champ de texte entraînent un changement de focalisation, un clic répété entraîne un événement de clic. Je surcharge donc les deux (ici, je ne remanie pas le code pour illustrer que les deux gestionnaires font la même chose) :

    tx = (TextView) m_activity.findViewById(R.id.allergymeds);
    if (tx != null) {
        tx.setShowSoftInputOnFocus(false);
        tx.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if (hasFocus) {
                    MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                    mld.setPatientId(m_sess.getActivePatientId());
                    mld.show(getFragmentManager(), "Allergy Medications Dialog");
                }
            }
        });
        tx.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MedicationsListDialogFragment mld = new MedicationsListDialogFragment();
                mld.setPatientId(m_sess.getActivePatientId());
                mld.show(getFragmentManager(), "Allergy Medications Dialog");
            }
        });
    }

0voto

indyfromoz Points 3452

Dans une application Android que j'étais en train de construire, j'avais trois EditText dans un LinearLayout disposés horizontalement. Je devais empêcher le clavier souple d'apparaître lors du chargement du fragment. En plus de définir focusable y focusableInTouchMode à true sur le LinearLayout j'ai dû mettre descendantFocusability a blocksDescendants . Sur onCreate J'ai appelé requestFocus sur le LinearLayout . Ceci a empêché l'apparition du clavier lors de la création du fragment.

Mise en page -

    <LinearLayout
       android:id="@+id/text_selector_container"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:weightSum="3"
       android:orientation="horizontal"
       android:focusable="true"
       android:focusableInTouchMode="true"
       android:descendantFocusability="blocksDescendants"
       android:background="@color/black">

       <!-- EditText widgets -->

    </LinearLayout>

Sur onCreate - mTextSelectorContainer.requestFocus();

0voto

Ajmal Salim Points 1281

Si quelqu'un cherche encore la solution la plus simple, définissez l'attribut suivant à true sur votre modèle parent

android:focusableInTouchMode="true"

Ejemplo:

<android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:focusableInTouchMode="true">

.......
......
</android.support.constraint.ConstraintLayout>

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