Désactiver le clavier virtuel sur NumberPicker
J'essaie de désactiver le clavier lors de l'utilisation d'un NumberPicker pour entrer des valeurs numériques (pour des raisons esthétiques). C'est ma mise en page-xml-code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="30dp"
android:layout_marginTop="30dp" >
<NumberPicker
android:id="@+id/repetitionPicker"
android:layout_width="40dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/repetitions_short_divider"
android:textAppearance="?android:attr/textAppearanceMedium" />
<NumberPicker
android:id="@+id/weightPicker"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="@string/pounds"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
<Button
android:id="@+id/saveButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="@string/save" />
</LinearLayout>
Et enfin, c'est le code où j'ai essayer de bloquer le clavier dans le onCreate()-méthode:
//hide keyboard
View.OnClickListener disableKeyBoardListener = new View.OnClickListener() {
public void onClick(View v) {
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
};
((EditText) weightPicker.getChildAt(1)).setInputType(InputType.TYPE_NULL);
((EditText) repetitionPicker.getChildAt(1)).setInputType(InputType.TYPE_NULL);
((EditText) weightPicker.getChildAt(1)).setOnClickListener(disableKeyBoardListener);
//((EditText) repetitionPicker.getChildAt(1)).setOnClickListener(disableKeyBoardListener);
//weightPicker.setOnClickListener(disableKeyBoardListener);
//repetitionPicker.setOnClickListener(disableKeyBoardListener);
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Malheureusement, le clavier apparaît toujours lorsque l'on clique sur un NumberPicker. Des idées?
InformationsquelleAutor damaxxed | 2012-01-13
Vous devez vous connecter pour publier un commentaire.
Juste trouvé cela et il fonctionne comme un charme:
myNumberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);
Vous pouvez également définir ce en XML:
Xml version d'Andrew Webber réponse
Exemple
Après la lecture par le biais de la com/android/internal/widget/NumberPicker.java le code source je suis arrivé à la solution suivante:
Juste amélioré le @MaxVogler 's ans (donc si wannt vote, ce vote @MaxVogler trop) et en faire une robuste hack. Aussi nous n'avons pas besoin d'appeler
setOnFocusChangeListener
etsetInputType
. SeulementsetFocusable
à false va faire.Ci-dessous est un helper api pour activer/désactiver la fonction
Voici une autre façon de faire qui permet à l'utilisateur de modifier un numéro de téléphone si ils veulent juste que cela supprime le clavier à l'origine. Utilisation
NumberPicker.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS)
pour supprimer le clavier lorsque l'interface montre d'abord que par les réponses ci-dessus. Puis obtenir votre dialogue ou de l'activité à mettre en œuvreView.OnTouchListener
, appelsetOnTouchListener(this)
sur votreNumberPicker
, et de la mise en œuvre deonTouch(View v,MotionEvent e)
réinitialiser le numberpicker descendant focalisation à sa valeur normale, puis retourne la valeur false.Renvoyer false signifie que le tactile est toujours traitées par le NumberPicker, ce qui signifie que si l'utilisateur appuie sur la zone d'édition, le clavier virtuel apparaît. C'est exactement ce que je voulais confrontés au même problème - avoir le clavier venir avec la boîte de dialogue lors de la première montre déplaît car il déplace la boîte de dialogue après elle apparaît.
après la création de la boîte de Dialogue dans le
onCreateDialog()
méthode et de trouver la NumberPicker:et voici le OnTouch méthode:
Le plus simple que j'ai trouvé c'est :
Je ne sais pas pourquoi cela fonctionne, mais la mise en OnClickListener qui n'a rien empêché du clavier de montrer (Lollipop)
Si vous ne souhaitez masquer le clavier de logiciel, lors du chargement de la vue avec votre numéro de sélecteur, mais encore voulez que les utilisateurs soient en mesure de modifier après le point de vue des charges, vous ne devriez pas le bloc descendant focalisation. Au lieu de cela, juste éviter que le nombre de sélecteur d'être la première a porté élément de votre point de vue.
Voir cette réponse pour plus de détails.
Basée sur la réponse ci-dessus:
* l'appel de cette:
ne va pas bloquer descendant focalisation (numberpicker sera modifiable)
cacher, programmable entrée sur créer
avant (traitement d'entrée) getValue() permettra d'obtenir une walue
Code de travail
Par programmation :
XML: