Apakah ada cara di Android untuk mendapatkan ketinggian keyboard virtual perangkat

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.

Larutan

Ya, Anda bisa, dengan bantuan Viewtree Observer dan pendengar tata letak global, coba saja langkah-langkah yang disebutkan di bawah ini

  1. Dapatkan tampilan root dari tata letak Anda
  2. Dapatkan Viewtree observer untuk root ini, dan tambahkan pendengar tata letak global di atas 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

Komentar (10)

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.

Komentar (2)

Solusi saya adalah kombinasi dari semua solusi di atas. Solusi ini juga hacky tetapi menyelesaikan masalah (setidaknya untuk saya).

  1. Saya memiliki tempat pada tampilan sementara dengan latar belakang transparan di bagian bawah layar.

  2. Saya telah menambahkan android:windowSoftInputMode="adjustResize" flag dalam tag aktivitas di manifes seperti yang disarankan @bill.

  3. 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.

Komentar (2)