Yazılım klavyesi görüntülendiğinde düzenler yukarı taşınıyor mu?


139

Yumuşak klavye ortaya çıktığında öğeleri yumuşak klavye tarafından gizlenir, ben göreceli alt öznitelik kümesi ile bir RelativeView birkaç öğe var.

Klavyenin üzerinde gösterilen yeterli ekran alanı varsa veya klavyenin üzerindeki bölümü kaydırılabilir hale getirmek için yukarı hareket etmelerini istiyorum, böylece kullanıcı öğeleri hala görebilir.

Buna nasıl yaklaşılacağına dair bir fikrin var mı?



@Dinedal Nasıl u bağıl alt özniteliği ur RelativeView ??
KJEjava48

Yanıtlar:



95

Bu kodu onCreate()yöntemde de kullanabilirsiniz :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

11
Benim için adjustPan screnn ayarlamış olsam bile, sadece tıkladığım düzenleme metnine kadar hareket et, ancak tüm düzeni değil
murt


22

Bildirim dosyanızın etkinliğinde değişiklikler yapın

windowSoftInputMode="adjustResize"

VEYA

onCreate()Etkinlik sınıfında yönteminizde değişiklik yapın.

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

11
Neden farklı bayraklar kullanıyorsunuz?
CoolMind

Mevcut sürüm android öneki gerektirir: android: windowSoftInputMode = "adjustResize"
Andrea Leganza

21

benzer sorun içinde kaydırma görünümü içeren benim düzeni ile karşı karşıya idi. EditText'te metin seçmeye çalıştığımda, Kopyala / Kes / Yapıştır eylem çubuğu aşağıdaki kodla yukarı taşınır, böylece düzeni yeniden boyutlandırmaz

android:windowSoftInputMode="adjustPan"

Aşağıdaki gibi değiştirerek

1) AndroidManifest.xml

android:windowSoftInputMode="stateVisible|adjustResize"

2) style.xml dosyası, aktivite tarzında

<item name="android:windowActionBarOverlay">true</item>

İşe yaradı.!!!!!!!!!!!!


18

AndroidManifest.xml'de şunları ayarlamayı unutmayın:

 android:windowSoftInputMode="adjustResize"

ve ScrollView içindeki RelativeLayout için şunları ayarlayın:

 android:layout_gravity="center" or android:layout_gravity="bottom" 

sorun olmayacak


android: layout_gravity = "merkez" çalıştı, teşekkürler! :) Şimdi EditText istediğim gibi klavyenin üzerinde hareket ediyor
Pavel Biryukov

11

satırın altındaki oncreate metod ekinde Faaliyet için

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

ve onCreate yöntemindeki parçalar için

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

10

Ekranı yukarı kaydırmak için izlenmesi gereken 3 adım vardır.

  1. Etkinliğiniz için manifest dosyasına yazın:

android: windowSoftInputMode = "adjustResize"

  1. Etkinliğinizin oncreate () yöntemine aşağıdaki satırı ekleyin

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

  1. Sonra tüm görünümünüzü aşağıdaki gibi XML dosyasındaki "Scrollview" içine yerleştirin:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:background="@drawable/bg"
    android:layout_height="match_parent" 
    > 
    <RelativeLayout
         android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center" >
        <TextView />
         .........
        <TextView />
        <EditText >
            <requestFocus />
        </EditText>
        <Button />
    </RelativeLayout>
 </ScrollView>

PS Ana göreli düzende android: layout_gravity = "center" eklemeyi unutmayın.


6

Diego Ramírez'ın bir yöntemini denedim, işe yarıyor. AndroidManifest'te:

    <activity
        android:name=".MainActivity"
        android:windowSoftInputMode="stateHidden|adjustResize">
        ...
    </activity>

Activity_main.xml dosyasında:

<LinearLayout ...
    android:orientation="vertical">

<Space
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_weight="1" />

<EditText
    android:id="@+id/edName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    android:hint="@string/first_name"
    android:inputType="textPersonName" />

<EditText ...>
...
</LinearLayout>

6
<activity name="ActivityName"
    android:windowSoftInputMode="adjustResize">
    ...
</activity>

Kaydırmak istediğiniz düzenin etrafına NestedScrollView ekleyin, bu mükemmel bir şekilde çalışır


3

Sorunlarıma sizinkiyle oldukça benzer bir çözüm buldum.

Her şeyden önce, sadece 2 elementli bir LinearLayout'um var, bir ImageView ve 2 EditText ve bir Düğme içeren bir LinearLayout var, bu yüzden onları klavyesiz tam ekranda ayrı tutmak gerekiyordu ve klavye göründüklerinde daha yakından görünmeleri gerekiyor.

Bu nedenle, görünümlerimi 0dp ve ağırlık 1'deki height özniteliğiyle ekledim, bu da görüşlerimi birbirinden ayrı tutmama izin verdi. klavye ortaya çıktığında, sabit bir yüksekliğe sahip olmadıklarından, boyutu yeniden boyutlandırır ve korurlar.

İşte bu kadar! Düzen yeniden boyutlandırılıyor ve görünümlerim arasındaki mesafe, klavye mevcut olduğunda veya yokken aynı.


6
Daha iyi anlamak için kodu neden göndermiyorsunuz?
johnkarka

Yukarıda bir örnek kod gönderdim: stackoverflow.com/a/31994697/2914140 .
CoolMind

a'yı kullanarak ConstraintLayoutve bir üst bölümü üste ve bir alt bölümü alt tarafa sabitleyerek bunu daha az hackli bir şekilde elde edebilirsiniz . Klavye açıldığında, ortadaki alanı sıkarak doğal olarak yeniden boyutlandırılacak (kullanıyorsanız adjustResize)
hmac

2
If user want this task using manifest then add this line in manifest
In manifest add this line: - android:windowSoftInputMode="adjustPan"
    e.g.
     <activity
           android:name=".ui.home.HomeActivity"
           android:screenOrientation="portrait"
           android:windowSoftInputMode="adjustPan">
     </activity>


    In Java File or Kotlin File(Programically) : - If user want this using Activity then add below line in onCreate Method

    activity!!.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Merhaba ve stackoverflow'a hoş geldiniz ve cevabınız için teşekkür ederim. Bir kod bloğu yayınlamak yerine, sorunun ne çözdüğünüze ve nasıl çözdüğünüze ilişkin kısa bir açıklama yapabilir misiniz? Bu, gelecekte bu soruyu bulan kişilerin sorunu ve bununla nasıl başa çıkacaklarını daha iyi anlamalarına yardımcı olacaktır.
Plutian

1

İşte tam bildirim kodu

<activity
        android:name=".activities.MainActivity"
        android:windowSoftInputMode="adjustResize"
        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

Eğer parçalarda iseniz o zaman onCreate etkinliğiniz için aşağıdaki kodu eklemek zorunda benim için sorunu çözer

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

1

Manifest dosyanıza aşağıdaki satırı ekleyin. Çalışacak

<activity name="MainActivity"
    android:windowSoftInputMode="stateVisible|adjustResize">
    ...
</activity>

1

En üst düzey düzene aşağıdaki satırı ekledim ve her şey çalıştı:

android:fitsSystemWindows="true"

@ yash786 muhtemelen bir odak alan düzenleme metninin altında göster düğmesi mi? İkinci soru, düzen dosyasını paylaşabilir veya düzenleme metnini klavyenin üstüne nasıl eklediğinize cevap verebilir misiniz?
Heroes84

android olmadan olay benim için çalışıyor: windowSoftInputMode = "stateVisible | adjustResize"
zoom

0

Tamam, bu çok geç ancak düzenleme metninizin altına bir Liste Görünümü eklerseniz, klavyenin ListView'i taşımadan o düzenleme metninin altındaki tüm düzenleri taşıyacağını keşfettim.

<EditText
android:id="@+id/et"
android:layout_height="match_parent"
android:layout_width="match_parent"



/>

<ListView
    android:layout_width="match_parent"
    android:layout_height="match_parent"//can make as 1dp
    android:layout_below="@+id/et" // set to below editext
    android:id="@+id/view"
    >
**<any layout**

Benim için işe yarayan tek çözüm bu.


0

Sorunumu çözecek tek bir tavsiye bile yok. Ayarlama Pan neredeyse yeniden Boyutlandırma Ayarlama işi gibidir . İ ayarlarsanız Hiçbir şey ayarlayın düzeni daha değil yukarı taşımak ama ben corrently yazıyorum bu alt benim EditText gizler. 24 saatlik sürekli aramadan sonra bu kaynağı buldum ve sorunumu çözdü.


0

Geç olabilir ama birkaç şey eklemek istiyorum. Android Studio Sürüm 4.0.1 ve Sürüm Sürüm 6.1.1'de windowSoftInputMode , Etkinliğinize aşağıdaki bayrakları eklerseniz beklendiği gibi çalışmaz:

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

Çok zaman harcadıktan sonra, o kesmek buldum. İçin için adjustResizeya AdjustPanya herhangi bir özelliğinden windowSoftInputModedüzgün işin, etkinlik o kaldırmak gerekir.

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.