Gulir halaman saat keyboard lunak muncul

99

Saya memiliki <ScrollView>tata letak:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_scrollview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/input_one"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_two"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

         <EditText
            android:id="@+id/input_three"
            android:layout_width="300dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:inputType="number" >

          <Button
            android:id="@+id/ok_btn"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginTop="20dp"
            android:text="@string/ok_str" />

      </LinearLayout>
</ScrollView>

Seperti yang Anda lihat di atas, tata letak sederhana terdiri dari tiga bidang masukan dan tombol "Ok".

Saya menjalankan aplikasi saya dengan tata letak di atas, ketika saya mengetuk bidang masukan pertama ( @+id/input_one), keyboard lunak akan muncul dari bawah layar, ia menyembunyikan bidang masukan ke-3 dan tombol "Ok".

Sejak saya menggunakan <ScrollView>, saya pikir saya dapat menggulir halaman ke atas untuk melihat bidang masukan ke-3 dan tombol "Ok" yang disembunyikan oleh keyboard lunak, tetapi halaman tersebut tidak dapat digulir . Mengapa? Bagaimana cara menghilangkannya? pada dasarnya, saya ingin melihat setiap kolom input dan tombol "Ok" bahkan keyboard lunak pun muncul.

Leem.fin
sumber
1
hapus <ScrollView>, LinearLayout harus menjadi tata letak luar Anda, itu akan bekerja, saya harap bahkan jika sofkeyboard muncul.
Abid A. Chaudhary
1
@pakshaheen Itu tidak akan memperbaiki masalah saat scrollview diperlukan.
Luten
berikut adalah kode kerja. stackoverflow.com/questions/7417123/…
Venkat

Jawaban:

125

Aku tetap masalah dengan mendefinisikan atribut berikut di <activity>dari AndroidManifest.xml

android:windowSoftInputMode="adjustResize"
Leem.fin
sumber
12
Anda tidak membutuhkan stateVisible. Itu akan membuat soft keyboard muncul ketika aplikasi diluncurkan bahkan ketika pengguna tidak fokus pada EditText
RajV
itu secara otomatis membuka keyboard bahkan tidak ada teks editan
Mr X
37

Oke, saya telah mencari beberapa jam sekarang untuk menemukan masalahnya, dan saya menemukannya.

Tidak ada perubahan yang menyukai fillViewport="true"atau android:windowSoftInputMode="adjustResize"membantu saya.

Saya menggunakan Android 4.4 dan ini adalah kesalahan besar :

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

Entah bagaimana, tema Layar Penuh mencegah ScrollView dari bergulir saat SoftKeyboard terlihat.

Saat ini, saya akhirnya menggunakan ini sebagai gantinya:

android:theme="@android:style/Theme.Black.NoTitleBar

Saya tidak tahu cara menghilangkan bilah sistem atas dengan tampilan waktu dan baterai, tetapi setidaknya saya mendapat masalah.

Semoga ini bisa membantu orang lain yang memiliki masalah yang sama.

EDIT: Saya mendapat sedikit solusi untuk kasus saya, jadi saya mempostingnya di sini :

Saya tidak yakin apakah ini akan berhasil untuk Anda, tetapi itu pasti akan membantu Anda dalam memahami, dan menjernihkan beberapa hal.

EDIT2: Berikut adalah topik bagus lainnya yang akan membantu Anda menuju ke arah yang benar atau bahkan memecahkan masalah Anda.

qweret.dll
sumber
+1 Dalam kasus saya, bilah status disembunyikan oleh lib pihak ke-3 dalam kode: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
de.
@qweret Bagaimana jika saya membutuhkan keduanya? Layar penuh dan bergulir.
Prab
@Prabs Apakah Anda menemukan solusi? Saya juga ingin Layar Penuh dan pengguliran.
Johny
@Tidak. Untuk saat ini saya menggunakan layar penuh untuk seluruh aplikasi kecuali aktivitas dengan scrolling3.
Prab
@Prabs Satu-satunya solusi yang saya pikir adalah memiliki status bar transparan tetapi dalam kasus saya masih menjadi masalah karena saya ingin mendukung API> = 16. Apakah kamu punya ide?
Johny
20

Bagi saya satu-satunya hal yang berhasil adalah dimasukkan ke dalam aktivitas di manifes atribut ini:

android:windowSoftInputMode="stateHidden|adjustPan"

Untuk tidak menampilkan keyboard saat membuka aktivitas dan tidak tumpang tindih dengan bagian bawah tampilan.

Jachumbelechao Sampai Mantekilla
sumber
14

letakkan ini di dalam Manifes Anda seperti ini dalam Mode Tanpa Layar penuh

android:windowSoftInputMode="stateVisible|adjustPan" 

dalam manifes Anda

<activity
    android:windowSoftInputMode="stateVisible|adjustPan"
    android:name="com.example.patronusgps.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
pengguna3594530
sumber
1
Saya sudah mencoba ini tetapi untungnya, tidak beruntung sama sekali ... Namun, tampilan root bukanlah a ScrollView, tetapi RelativeLayoutyang berisi LinearLayoutyang kemudian berisiScrollView
James Heald
11

Di properti Manifestdefine Anda windowSoftInputMode:

<activity android:name=".MyActivity"
          android:windowSoftInputMode="adjustNothing">
Mohammad Ersan
sumber
2
@JacobRas silakan periksa tautan ini: developer.android.com/reference/android/… itu memiliki nilai "adjustNothing" :)
Mohammad Ersan
2
Saya mengalami masalah yang sama, tetapi scrollview tidak berfungsi dengan AdjustNothing :(
Narendra Singh
8

Lihat ini.

<activity android:name=".Calculator"
    android:windowSoftInputMode="stateHidden|adjustResize" 
    android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>
Ravi1187342
sumber
3

Ini hanya berhasil untuk saya:

android:windowSoftInputMode="adjustPan"
blueware
sumber
2

Juga jika Anda ingin melakukan itu secara terprogram cukup tambahkan baris di bawah ini ke onCreate aktivitas.

getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | 
            WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE );
ucMedia
sumber
1

Anda dapat mencoba menggunakan kode berikut untuk menyelesaikan masalah Anda:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>
Энхжин Амарсайхан
sumber
17
Anda harus repot-repot menjelaskan apa yang dilakukan kode Anda alih-alih hanya memposting kode potongan kering sebagai jawaban.
Angel Politis
0

Nah, jawaban paling sederhana yang saya coba hanyalah menghapus kode Anda yang membuat aktivitas menjadi layar penuh. Saya memiliki kode seperti ini yang bertanggung jawab untuk membuat aktivitas saya menjadi layar penuh:

if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT) {

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
    }

saya baru saja menghapus kode saya dan berfungsi dengan baik meskipun jika Anda ingin mencapai ini dengan layar penuh Anda, maka Anda harus mencoba beberapa metode lain

Akash Gupta
sumber