Ich versuche, die Softtastatur zu deaktivieren, wenn ich einen NumberPicker zur Eingabe numerischer Werte verwende (aus ästhetischen Gründen). Das ist mein Layout-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>
Und schließlich ist dies der Code, mit dem ich versuche, die Tastatur in der onCreate () - Methode zu blockieren:
// 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);
Leider wird die Softtastatur immer noch angezeigt, wenn Sie auf einen NumberPicker klicken. Irgendwelche Ideen?
XML-Version von Andrew Webbers Antwort
Beispiel
quelle
Nachdem ich den Quellcode com / android / internal / widget / NumberPicker.java gelesen hatte, kam ich zu folgender Lösung:
quelle
Verbessere einfach die Ans von @MaxVogler (also wenn du diese Abstimmung auch für @MaxVogler stimmen willst) und mache es zu einem robusten Hack. Auch müssen wir nicht anrufen
setOnFocusChangeListener
undsetInputType
. NursetFocusable
zu falsch wird reichen.Unten finden Sie eine Hilfs-API zum Aktivieren / Deaktivieren der Funktion
quelle
Hier ist eine andere Möglichkeit, die es dem Benutzer ermöglicht, eine Nummer noch zu bearbeiten, wenn er möchte - sie unterdrückt zunächst nur die Softtastatur. Verwenden Sie
NumberPicker.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS)
diese Option , um die Softtastatur zu unterdrücken, wenn die Benutzeroberfläche zum ersten Mal gemäß den obigen Antworten angezeigt wird. Lassen Sie dann Ihren Dialog oder Ihre Aktivität implementierenView.OnTouchListener
, rufen SiesetOnTouchListener(this)
Ihre aufNumberPicker
und setzen Sie bei Ihrer ImplementierungonTouch(View v,MotionEvent e)
die Fokussierbarkeit der Nachkommen des Nummernwählers auf ihren normalen Wert zurück, und geben Sie dann false zurück.Die Rückgabe von false bedeutet, dass die Berührung weiterhin vom NumberPicker verarbeitet wird. Wenn der Benutzer auf das Bearbeitungsfeld tippt, wird die Softtastatur angezeigt. Dies ist genau das, was ich mit dem gleichen Problem konfrontiert haben wollte - es ist unangenehm, wenn die Softtastatur beim ersten Anzeigen den Dialog anzeigt, da sie den Dialog nach dem Erscheinen nach oben verschiebt.
Nachdem Sie den Dialog in der
onCreateDialog()
Methode erstellt und den NumberPicker gefunden haben:und hier ist die OnTouch-Methode:
quelle
Die einfachste Arbeit, die ich fand, war:
quelle
Wenn Sie die Softwaretastatur nur beim Laden der Ansicht mit Ihrer Nummernauswahl ausblenden möchten, die Benutzer jedoch nach dem Laden der Ansicht noch bearbeiten können sollen, sollten Sie die Fokussierbarkeit von Nachkommen nicht blockieren. Verhindern Sie stattdessen einfach, dass die Nummernauswahl das erste fokussierte Element in Ihrer Ansicht ist.
Siehe diese Antwort für Details.
Basierend auf der obigen Antwort:
quelle
Ich weiß nicht, warum es funktioniert, aber die Einstellung von OnClickListener, die nichts bewirkt, verhinderte die Anzeige der Tastatur (Lollipop)
quelle
* nenne das:
blockiert nicht die Fokussierbarkeit von Nachkommen (Numberpicker kann bearbeitet werden)
blendet weiche Eingaben beim Erstellen aus
Vor (Verarbeitung der Eingabe) getValue () ermöglicht es, die richtige Sprache zu erhalten
quelle
Arbeitscode Programmatisch:
XML:
quelle