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" />
J'ai trouvé que c'était la solution:
Window.SetSoftInputMode (SoftInput.StateAlwaysHidden);
Note: Ceci est en C # pas Java pour Android
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>
Ajouter ceci dans onCreate
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
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
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;
}
});
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();
}