Yumuşak klavye açıldığında sayfa kaydırma


100

Bir <ScrollView>düzenim var:

<?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>

Yukarıda gördüğünüz gibi, basit düzen, üç giriş alanı ve bir "Tamam" düğmesinden oluşur.

Uygulamamı yukarıdaki düzen ile çalıştırıyorum, 1. giriş alanına ( @+id/input_one) dokunduğumda yazılım klavyesi ekranın altından açılır , 3. giriş alanını ve "Tamam" düğmesini gizler .

Kullandığımdan beri , yazılım klavyesi tarafından gizlenen<ScrollView> 3. giriş alanını ve "Tamam" düğmesini görmek için sayfayı yukarı kaydırabileceğimi düşündüm , ancak sayfa kaydırılamaz . Neden? Ondan nasıl kurtulurum? Temel olarak, her girdi alanını ve "Tamam" düğmesini hatta yazılım klavyesinin açıldığını görmek istiyorum.


1
<ScrollView> öğesini kaldırın, LinearLayout dış düzeniniz olmalıdır, çalışacaktır, umarım sofkeyboard açılırsa bile.
Abid A. Chaudhary

1
@pakshaheen Bu, scrollview gerektiğinde sorunu çözmez.
Luten

Yanıtlar:


126

Ben aşağıdaki niteliğini tanımlayarak sorunu giderilmiştir <activity>arasında AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

12
StateVisible'a ihtiyacınız yok. Bu, kullanıcı bir EditText'e odaklanmadığında bile uygulama başlatıldığında yumuşak klavyenin görünmesini sağlayacaktır
RajV

otomatik olarak açık klavye, edittext olmasa bile
Mr X

37

Tamam, sorunu bulmak için birkaç saat aradım ve buldum.

Değişikliklerin hiçbiri bana benzemedi fillViewport="true"veya android:windowSoftInputMode="adjustResize"bana yardımcı olmadı.

Android 4.4 kullanıyorum ve bu büyük bir hata :

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

Bir şekilde, Tam Ekran temaları, SoftKeyboard göründüğünde ScrollViews'ın kaymasını engelliyor.

Şu anda bunun yerine şunu kullandım:

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

Zaman ve pil göstergesi ile en üst sistem çubuğundan nasıl kurtulacağımı bilmiyorum, ama en azından sorunu anladım.

Umarım bu, aynı sorunu yaşayanlara yardımcı olur.

DÜZENLEME: Durumum için küçük bir çözüm buldum, bu yüzden buraya gönderdim :

Bunun sizin için işe yarayıp yaramayacağından emin değilim, ancak kesinlikle anlamanıza ve bazı şeyleri netleştirmenize yardımcı olacaktır.

DÜZENLEME2: İşte doğru yöne gitmenize ve hatta probleminizi çözmenize yardımcı olacak başka bir iyi konu.


+1 Benim durumumda durum çubuğu, koddaki bir 3. taraf kitaplığı tarafından gizlendi: getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
de.

@qweret Ya ikisine de ihtiyacım olursa? Tam ekran ve kaydırma.
2017,

@Prabs Herhangi bir çözüm buldunuz mu? Ayrıca hem Tam Ekran hem de kaydırmayı istiyorum.
Johny

@Johny Hayır. Şimdilik kaydırma ile bu aktivite dışında tüm uygulama için tam ekran kullanıyorum3.
Prabs

@Prabs Düşündüğüm tek çözüm şeffaf durum çubuğuna sahip olmakla birlikte benim durumumda hala bir sorun çünkü API> = 16'yı desteklemek istiyorum. Herhangi bir fikrin var mı?
Johny

21

Benim için işe yarayan tek şey, şu açıklamadaki tezahürdeki faaliyete konulmasıdır:

android:windowSoftInputMode="stateHidden|adjustPan"

Aktiviteyi açarken klavyeyi göstermemek ve görünümün alt kısmıyla çakışmamak için.


14

Bunu tam ekran yok modunda Manifest'inizin içine koyun

android:windowSoftInputMode="stateVisible|adjustPan" 

tezahüründe

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

1
Bu denedim ama unfrotunately, hiçbir şans ... Ancak, kök görünümüdür değil bir ScrollView, ama bir RelativeLayoutbir içeren LinearLayoutardından içerenScrollView
James Heald


8

bunu kontrol et.

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

3

Bu sadece benim için çalıştı:

android:windowSoftInputMode="adjustPan"

2

Ayrıca, bunu programlı olarak yapmak istiyorsanız, aşağıdaki satırı etkinliğin onCreate'ine ekleyin.

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

1

Sorununuzu çözmek için aşağıdaki kodu kullanmayı deneyebilirsiniz:

 <activity
     android:name=".DonateNow"
     android:label="@string/title_activity_donate_now"
     android:screenOrientation="portrait"
     android:theme="@style/AppTheme"
     android:windowSoftInputMode="stateVisible|adjustPan">
 </activity>

17
Cevap olarak sadece kuru bir parça kodu göndermek yerine kodunuzun ne yaptığını açıklamakla uğraşmalısınız.
Angel Politis

0

Peki denediğim en basit cevap, etkinliğin tam ekrana geçmesini sağlayan kodunuzu kaldırmaktır.Etkinliğimin tam ekrana geçmesini sağlayan buna benzer bir kodum vardı:

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

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

kodumu yeni kaldırdım ve tamamen iyi çalışıyor, ancak bunu tam ekranınızda gerçekleştirmek istiyorsanız, başka yöntemler denemeniz gerekecek

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.