Keyboard lunak Android mencakup bidang EditText


Jawaban:


163

Apakah Anda bertanya bagaimana mengontrol apa yang terlihat ketika keyboard lunak terbuka? Anda mungkin ingin bermain dengan windowSoftInputMode . Lihat dokumen pengembang untuk diskusi lebih lanjut.


2
Ini berfungsi dengan baik, tetapi pastikan Anda memiliki <item name = "android: windowIsFloating"> true </item> dalam gaya dialog Anda, jika Anda menggunakan gaya dialog khusus.
Dmitry Chistyakov

Tampaknya ini tidak berfungsi dalam mode lansekap (Nexus 7), elemen yang dapat diedit tetap tersembunyi di bawah keyboard. Saya mencoba berbagai kombinasi windowSoftInputMode. Tampaknya saya tidak dapat mengatur windowIsFloating karena ActionBar tidak akan mendukungnya. Atau mungkin ada hubungannya dengan fakta bahwa EditText saya ada di dalam item tampilan daftar?
Sampo Sarrala - codidact.org

Ini tidak akan berfungsi setelah menambahkan <item name = "android: windowTranslucentStatus"> true </item> pada mereka. Adakah yang memperbaikinya?
Maks.

1
@ Max Tambahkan android:fitsSystemWindows="true"ke tampilan root Anda untuk menyelesaikan ini.
David Passmore

1
Bagaimana dengan menarik tata letak penuh di atas keyboard ketika keyboard lunak tersedia tidak peduli apa pun seperti whatsapp ....
Karue Benson Karue

162

Saya memiliki masalah yang sama. Coba kode berikut:

android:windowSoftInputMode="adjustPan"

tambahkan ke manifes.xml Anda di tag aktivitas dari aktivitas yang menyimpan input. contoh:

<activity
            android:name=".Activities.InputsActivity"
            ...
            android:windowSoftInputMode="adjustPan"
            />

14
Jawaban paling sederhana! Sama seperti catatan, ini perlu ditambahkan dalam file Manifest dan di bawah aktivitas yang kita inginkan.
NRR

4
Dalam kasus saya, ini setidaknya tidak mengacaukan html saya, seperti yang adjustResizeakan terjadi, tetapi juga mencakup bidang input saya
Rahul Dole

8
Ini tidak membantu saya
vikifor

1
@vikifor, pastikan Anda menambahkan edittext ke scrollview. Bahkan jika Anda hanya memiliki 3-4 bidang dalam tata letak Anda, tambahkan semua bidang Anda ke scrollview. Ini membuatnya dapat digulir ketika keyboard virtual terbuka.
Kuldeep Sakhiya

Bekerja dengan baik, tetapi setiap kali saya menyentuh pada tampilan EditText, keyboard digambar ulang.
Iqbal

55

Saya memiliki masalah yang sama di mana papan tombol berada di atas tampilan EditText yang ditempatkan di bagian bawah layar. Saya dapat menemukan solusi dengan menambahkan satu baris ke aktivitas file AndroidManifest.xml yang relevan.

android:windowSoftInputMode="adjustResize|stateHidden"

Seperti inilah seluruh tag aktivitas:

<activity
        android:name="com.my.MainActivity"
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>

Di sini nilai yang paling penting adalah AdjustResize. Ini akan menggeser keseluruhan UI ke atas untuk memberikan ruang bagi papan tombol softkey.


Tapi ini mungkin mengacaukan tampilan html Anda jika css Anda memiliki sebagian besar nilai persentase
Rahul Dole

Apakah Anda menebak-nebak di sini atau sudah mencobanya? btw seharusnya tidak mengacaukan html Anda. Saya sudah mencoba dengan tampilan web. Ini akan mengubah seluruh tampilan bukan elemen individual.
DanKodi

1
Saya mencobanya. Saya pikir itu terjadi karena css saya memiliki sebagian besar nilai persentase
Rahul Dole

@DanKodi saya mencoba adjustResize|stateHiddendan tidak ada bedanya adjustPan.
IgorGanapolsky

25

Mengapa tidak mencoba menambahkan ScrollView untuk membungkus apa pun yang ingin Anda gulir. Berikut adalah cara saya melakukannya, di mana saya benar-benar meninggalkan header di atas yang tidak menggulir, sedangkan widget dialog (khususnya EditTexts) gulir ketika Anda membuka tombol lunak.

<LinearLayout android:id="@+id/HeaderLayout" >
  <!-- Here add a header or whatever will not be scrolled. -->
</LinearLayout>
<ScrollView android:id="@+id/MainForm" >
  <!-- Here add your edittexts or whatever will scroll. -->
</ScrollView>

Saya biasanya memiliki LinearLayout di dalam ScrollView, tetapi itu terserah Anda. Juga, mengatur gaya Scrollbar ke outsideInset membantu, setidaknya pada perangkat saya.


4
Sementara jawaban Mayra adalah apa yang harus dilakukan semua orang (dan mungkin apa yang menurut Google harus dilakukan setiap orang), inilah yang akhirnya saya lakukan hampir setiap waktu. Ini satu-satunya cara untuk mendapatkan kontrol nyata yang diperlukan untuk membuat tampilan menjadi benar. Mendesah.
Scott Biggs

jangan meremehkan komentar Scott. Itu benar. dalam kasus saya, saya tidak ingin mengubah ukuran atau menggeser tampilan daftar saya, tetapi ingin mengambil editText di akhir daftar itu. Jadi, saya telah meletakkan editText di scrollView dan berfungsi seperti yang diharapkan.
Darpan

15

Yang perlu Anda lakukan adalah

android:isScrollContainer="true"

sumber: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/


1
Sementara jawabannya sendiri tidak banyak membantu saya (atribut tidak diperlukan), sumber tertaut berisi penjelasan lengkap (formulir harus disematkan di ScrollView). Terima kasih!
johndodo

Demikian juga, tidak ada pada halaman yang membantu saya tetapi tautan menunjukkan penambahan adjustResize ke aktivitas windosSoftInputMode dan itu berhasil.
steven smith

14

Maaf telah menghidupkan kembali utas lama tetapi tidak ada pengaturan yang disebutkan android:imeOptions="flagNoFullscreen"di elemen EditText Anda


7
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

bekerja untuk EditText android, sementara itu tidak berfungsi untuk tampilan web atau xwalkview. Saat keyboard lunak menyembunyikan input di tampilan web atau xwalkview yang telah Anda gunakanandroid:windowSoftInputMode="adjustResize"


4

Saya percaya bahwa Anda dapat membuatnya gulir dengan menggunakan trackball, yang mungkin dicapai secara terprogram melalui metode seleksi pada akhirnya, tapi itu hanya sebuah ide. Saya tahu bahwa metode trackball biasanya bekerja, tetapi untuk cara yang tepat untuk melakukan ini dan membuatnya bekerja dari kode, saya tidak yakin.
Semoga itu bisa membantu.


Apa yang saya pikir saya butuhkan adalah cara untuk membuat jendela "artifisial" lebih lama sehingga tampilan dapat bergulir. Saat ini RelativeLayout diatur ke android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis

Saya tidak tahu solusinya kalau begitu. Mungkin Anda mungkin ingin secara manual menyesuaikan nilai lebar dan tinggi sesuai dengan kebutuhan Anda, dengan merentangkannya lebih jauh ke apa yang "wrap_content" selesaikan.
Luis Miguel Serrano

1

tambahkan satu baris ini ke aktivitas relatif Anda di mana papan tombol menutupi metode edit text.inside onCreat ().

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

0

Saya tahu ini sudah tua tetapi tidak ada solusi di atas yang berfungsi untuk saya. Setelah debugging yang ekstensif, saya menemukan masalah. Solusinya adalah mengatur android:windowTranslucentStatusatribut menjadi false di styles.xml saya


0

Jika Bidang EditTeks dicakup oleh Papan Ketik Gunakan kode berikut:

    EditText= findViewById(R.id.edittext)
    EditText?.getParent()?.requestChildFocus(EditText,EditText)

Jika Anda ingin kursor berada di EditText Berfokus daripada gunakan EditText.requestFocus()setelah EditText?.getParent()?.requestChildFocus(EditText,EditText) yang membantu untuk mendapatkan fokus dan Kursor di EditText Berfokus.


-1

Edit AndroidManifest.xml Anda

android:windowSoftInputMode="adjustResize"

Tambahkan ini ke tampilan root Anda dari file Layout.

android:fitsSystemWindows="true"

Itu saja.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.