web-dev-qa-db-fra.com

Android: EditText active automatiquement le clavier. Comment arrêter?

J'ai un simple EditText sur un ListView défini ci-dessous.

Lorsque l'application est exécutée, le texte d'édition est sélectionné et le clavier apparaît.

Je ne veux pas que cela se produise. Je ne veux pas qu'il soit sélectionné ou que le clavier apparaisse par défaut.

<EditText
    Android:id="@+id/search_box"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:hint="type to search titles"
    Android:inputType="text"
    Android:maxLines="1"
    Android:capitalize="none"
    Android:linksClickable="false"
    Android:autoLink="none"
    Android:autoText="true"
    Android:singleLine="true" />
<ListView
    Android:id="@+id/DetailsListView"
    Android:layout_width="fill_parent"
    Android:layout_height="0dip"
    Android:layout_weight="1"
    Android:background="@color/transparent"
    Android:cacheColorHint="@color/transparent"
    Android:listSelector="@drawable/list_selector"
    Android:fastScrollEnabled="true" />
17

J'ai trouvé que c'était la solution:

Window.SetSoftInputMode (SoftInput.StateAlwaysHidden);

Note: Ceci est en C # pas Java pour Android

11

Premièrement, la balise est monodroïde, elle est donc sur C # et la réponse acceptée est correcte.

Mais ce n'est pas ce que je pense que l'auteur veut ... cette astuce cache juste le clavier mais les editText ont toujours le focus.

Pour faire cela à la fois en Java et en C #, vous devez mettre ceci dans votre Layout racine:

Android:descendantFocusability="beforeDescendants"
Android:focusableInTouchMode="true"

Par exemple : 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="@color/white"
    Android:descendantFocusability="beforeDescendants"
    Android:focusableInTouchMode="true"
              >
....
</LinearLayout>
29
Dahevos

Ajouter ceci dans onCreate

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
8
Kevin Parker

essayez ceci dans la mise en page 

<EditText
                    Android:id="@+id/myid2"
                    Android:layout_width="fill_parent"
                    Android:layout_height="wrap_content"
                    Android:layout_below="@id/myid1"
                    Android:clickable="true"
                    Android:cursorVisible="false"
                    Android:focusable="false"
                    Android:hint="@string/hint"
                    Android:singleLine="true"
                    Android:textColor="@color/black"
                    Android:textSize="15dp" />

et ceci dans votre code

    myEditText.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {

            if (event.getAction() == MotionEvent.ACTION_UP) {
                //do tasks
            }
            return false;
        }
    });

je ne sais pas si c'est utile. Je ne sais même pas ce que ça fait. mais cela a résolu un problème similaire pour moi. Sry si j'ai perdu votre temps

4
Housefly

j'ai trouvé ma solution, vous pouvez essayer celui-ci et cela fonctionne parfaitement.

xml (je mets editText focusableInTouchMode à false dans defualt):

       <EditText ... Android:focusableInTouchMode="false" .../>

et j'ai changé focusableInTouchMode après avoir touché en Java:

        yourEditText.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            yourEditText.setFocusableInTouchMode(true);
            return false;
        }
    });
1
Ali Ghaemi

Android: windowSoftInputMode = "stateHidden" ne fonctionnait pas pour moi. La manipulation du focus sur les éléments et d'autres techniques n'a pas non plus été abordée (même si le paramètre est activé, false indique le clavier).

Ma solution: Créer une fonction hideKeyboard:

private void hideKeyboard() {
        InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

Et déclenchez-la chaque fois que l'interface utilisateur hébergeant le champ de texte devient visible:

Pour un dialogue:

 dialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            hideKeyboard();
        }

Pour un widget:

@Override
public void setVisibility(int visibility) {
    super.setVisibility(visibility);
    hideKeyBoard();
}
0
TomDK