Apakah ada cara di Android untuk mendapatkan ketinggian keyboard virtual yang ditampilkan pada perangkat dalam waktu berjalan? Sebenarnya saya ingin menampilkan kotak teks di atas keyboard.
Ya, Anda bisa, dengan bantuan Viewtree Observer dan pendengar tata letak global, coba saja langkah-langkah yang disebutkan di bawah ini
sekarang setiap kali soft keyboard ditampilkan, android akan mengubah ukuran layar Anda dan Anda akan menerima panggilan pada listener Anda. Hanya itu saja yang perlu Anda lakukan sekarang adalah menghitung perbedaan antara tinggi yang dimiliki tampilan root Anda setelah ukuran ulang dan ukuran aslinya. Jika perbedaannya lebih dari 150, anggaplah ini sebagai keyboard yang telah digelembungkan.
Di bawah ini adalah contoh kode
root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
public void onGlobalLayout(){
int heightDiff = root.getRootView().getHeight()- root.getHeight();
// IF height diff is more then 150, consider keyboard as visible.
}
});
Salam, Techfist
menempatkan kotak teks sebagai induk bagian bawah.
android:layout_alignParentBottom="true"
dan di dalam berkas manifes buatlah masukan lunak adjustresize
android:windowSoftInputMode="adjustResize"
maka kotak teks akan bergerak ke atas ketika keyboard muncul.
Solusi saya adalah kombinasi dari semua solusi di atas. Solusi ini juga hacky tetapi menyelesaikan masalah (setidaknya untuk saya).
Saya memiliki tempat pada tampilan sementara dengan latar belakang transparan di bagian bawah layar.
Saya telah menambahkan android:windowSoftInputMode="adjustResize"
flag dalam tag aktivitas di manifes seperti yang disarankan @bill.
Sekarang cerita utamanya ada di onGlobalLayout()
. Di sana saya menghitung selisih antara sumbu y tampilan temp dan tinggi tampilan root
tampilan akhir View = findViewById(R.id.base);
view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int rootViewHeight = view.getRootView().getHeight();
View tv = findViewById(R.id.temp_view);
int lokasi[] = new int[2];
tv.getLocationOnScreen(lokasi);
int height = (int) (location[1] + tv.getMeasuredHeight());
deff = rootViewHeight - tinggi;
// deff adalah tinggi keyboard lunak
}
});
Tapi bagaimanapun juga untuk menyelesaikan masalah @zeeshan0026 hanya satu bendera di manifes android:windowSoftInputMode="adjustResize"
sudah cukup.