Saya mencoba untuk menonaktifkan keyboard lunak saat menggunakan NumberPicker untuk memasukkan nilai numerik (untuk alasan estetika). Ini adalah layout-xml-code saya:
<?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>
Dan akhirnya ini adalah kode tempat saya mencoba memblokir keyboard di metode onCreate () -:
// 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);
Sayangnya, keyboard lunak masih muncul ketika mengklik pada NumberPicker. Ada ide?
Versi xml dari jawaban Andrew Webber
Contoh
sumber
Setelah membaca kode sumber com / android / internal / widget / NumberPicker.java saya mendapatkan solusi berikut:
sumber
Hanya meningkatkan ans @MaxVogler (jadi jika Anda tidak dapat memilih ini @MaxVogler juga) dan menjadikannya hack yang kuat. Kami juga tidak perlu menelepon
setOnFocusChangeListener
dansetInputType
. HanyasetFocusable
melakukan yang salah yang akan dilakukan.Di bawah ini adalah helper api untuk mengaktifkan / menonaktifkan fitur
sumber
Berikut cara lain untuk melakukannya yang memungkinkan pengguna masih mengedit nomor jika mereka mau - itu hanya menekan keyboard lunak pada awalnya. Gunakan
NumberPicker.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS)
untuk menekan keyboard lunak ketika antarmuka pertama kali ditampilkan sesuai jawaban di atas. Kemudian dapatkan dialog atau aktivitas Anda untuk mengimplementasikanView.OnTouchListener
, panggilsetOnTouchListener(this)
AndaNumberPicker
, dan dalam implementasi AndaonTouch(View v,MotionEvent e)
atur ulang fokus penurun angka ke nilai normal, lalu kembalikan salah.Mengembalikan false berarti bahwa sentuhan masih diproses oleh NumberPicker, yang berarti bahwa jika pengguna mengetuk kotak edit, keyboard lunak muncul. Ini kebetulan persis apa yang saya inginkan dihadapkan dengan masalah yang sama - memiliki keyboard lunak muncul dengan dialog ketika pertama kali menunjukkan tidak menyenangkan karena menggeser dialog ke atas setelah muncul.
setelah membuat Dialog dalam
onCreateDialog()
metode dan menemukan NumberPicker:dan inilah metode OnTouch:
sumber
Yang paling sederhana yang saya temukan untuk bekerja adalah:
sumber
Jika Anda hanya ingin menyembunyikan keyboard perangkat lunak saat memuat tampilan dengan pemilih nomor Anda, tetapi tetap ingin pengguna dapat mengedit setelah tampilan dimuat, maka Anda tidak boleh memblokir fokus yang menurun. Alih-alih, cukup cegah pemilih nomor menjadi item fokus pertama dalam tampilan Anda.
Lihat jawaban ini untuk detailnya.
Berdasarkan jawaban di atas:
sumber
Saya tidak tahu mengapa itu bekerja, tetapi pengaturan OnClickListener yang tidak melakukan apa pun mencegah keyboard ditampilkan (Lollipop)
sumber
* menyebut ini:
tidak akan memblokir fokus turunan (numberpicker akan dapat diedit)
akan menyembunyikan input lunak saat membuat
sebelum (memproses input) getValue () akan memungkinkan untuk mendapatkan nilai yang tepat
sumber
Kode kerja secara terprogram:
XML:
sumber