Android yazılım klavyesi EditText alanını kapsar


Yanıtlar:


163

Yazılım klavyesi açıldığında neyin görüneceğini nasıl kontrol edeceğinizi mi soruyorsunuz? WindowSoftInputMode ile oynamak isteyebilirsiniz . Daha fazla tartışma için geliştirici belgelerine bakın .


2
Bu iyi çalışır, ancak özel iletişim stili kullanıyorsanız, iletişim stilinizde <item name = "android: windowIsFloating"> true </item> olduğundan emin olun.
Dmitry Chistyakov

Bu, yatay modda (Nexus 7) çalışmıyor gibi görünüyor, düzenlenebilir öğe klavye altında gizli kalıyor. WindowSoftInputMode'un farklı kombinasyonlarını denedim. ActionBar desteklemediğinden windowIsFloating ayarlayamıyorum gibi görünüyor. Ya da EditText'imin liste görünümü öğesinin içinde olmasıyla ilgili bir şey olabilir mi?
Sampo Sarrala - codidact.org

Bu, onlara <item name = "android: windowTranslucentStatus"> true </item> ekledikten sonra çalışmaz. Herhangi biri bunu düzeltti mi?
Maksimum

1
@Max Bunu android:fitsSystemWindows="true"çözmek için kök görünümünüze ekleyin .
David Passmore


162

Aynı sorunları yaşadım. Aşağıdaki kodu deneyin:

android:windowSoftInputMode="adjustPan"

girdiyi tutan etkinliğin etkinlik etiketindeki manifest.xml dosyasına ekleyin. misal:

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

14
En basit cevap! Bir not olarak, bunun Manifest dosyasına ve istediğimiz etkinlik altına eklenmesi gerekir.
NRR

4
Benim durumumda, bu en azından benim gibi benim html berbat değil adjustResize, ama aynı zamanda benim girdi alanları da kapsar
Rahul Dole

8
Bu bana yardımcı olmuyor
vikifor

1
@vikifor, düzenleme metninizi scrollview'e eklediğinizden emin olun. Düzeninizde yalnızca 3-4 alan olsa bile, tüm alanlarınızı kaydırma görünümüne ekleyin. Bu, sanal klavye açıldığında kaydırılabilir olmasını sağlar.
Kuldeep Sakhiya

İyi çalışıyor, ancak EditText görünümüne dokunduğumda klavye yeniden çiziliyor.
İkbal

55

Yazılımın ekranın alt kısmına yerleştirilen EditText görünümlerinin üstünde olduğu ile aynı sorunu yaşadım. AndroidManifest.xml dosyamın ilgili etkinliğine tek bir satır ekleyerek bir çözüm bulabildim.

android:windowSoftInputMode="adjustResize|stateHidden"

Etkinlik etiketinin tamamı şöyle görünür:

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

Burada en önemli değer adjustResize'dir. Bu, yazılım klavyesine yer açmak için tüm kullanıcı arayüzünü yukarı kaydırır.


Ancak css'inizin çoğunlukla yüzde değerleri varsa, html'nizin görünümünü bozabilir
Rahul Dole

Burada mı tahmin ediyorsunuz yoksa denediniz mi? btw sizin html berbat olmamalıdır. Web görünümleriyle denedim. Tek tek unsurları değil tüm görüşü değiştirecektir.
DanKodi

1
Denedim. Bence olur çünkü css'm çoğunlukla yüzde değerlere sahip
Rahul Dole

@DanKodi denedim adjustResize|stateHiddenve hiçbir fark yaratmadı adjustPan.
IgorGanapolsky

25

Neden kaydırmak istediğinizi sarmak için bir ScrollView eklemeye çalışmıyorsunuz? Yumuşak tuş takımını açtığınızda diyalog widget'ları (özellikle EditTexts) kaydırırken, bunu yapmadım, üstte kaydırma yapmayan bir üstbilgi bırakıyorum.

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

Genellikle ScrollView içinde bir LinearLayout olurdu, ama bu size kalmış. Ayrıca, Kaydırma çubuğu stilini outsideInset olarak ayarlamak en azından aygıtlarımda yardımcı olur.


4
Mayra'un yanıtı herkesin yapması gereken şey (ve muhtemelen Google'ın herkesin yapması gerektiğini düşündüğü şey) olsa da, neredeyse her seferinde bunu yapıyorum. Ekranı doğru hale getirmek için gereken gerçek kontrolü elde etmenin tek yolu budur. İç çekmek.
Scott Biggs

Scott'ın yorumunu hafife alma. Bu doğru. benim durumumda yeniden boyutlandırmak ya da liste görünümümü kaydırmak istemiyordum, ama o listenin sonunda editText almak istedim. Yani, scrollText'i scrollView içine koydum ve beklendiği gibi çalışıyor.
Darpan

15

Tek yapman gereken

android:isScrollContainer="true"

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


1
Cevabın kendisi bana çok yardımcı olmadı (öznitelik gerekli değildi), bağlantılı kaynak tam açıklamayı içeriyor (form ScrollView'a gömülmelidir). Teşekkürler!
johndodo

Benzer şekilde, sayfadaki hiçbir şey bana yardımcı olmadı ancak bağlantı windosSoftInputMode etkinliğine adjustResize öğesini eklemeyi gösterdi ve bu işe yaradı.
steven smith

14

Eski bir ileti android:imeOptions="flagNoFullscreen"dizisini yeniden canlandırdığım için üzgünüm, ancak EditText öğenizde hiç kimse belirtilmedi


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

android EditText için çalışıyor, webview veya xwalkview için çalışmıyor. Yazılım klavyesi girişi web görünümünde veya xwalkview'de gizlediğindeandroid:windowSoftInputMode="adjustResize"


4

Sonunda seçim yöntemleriyle programlı olarak elde edilebilen topunu kullanarak kaydırma yapabileceğinizi düşünüyorum, ama bu sadece bir fikir. Topunu yönteminin tipik olarak çalıştığını biliyorum, ancak bunu yapmanın ve koddan çalışmasını sağlamanın tam yolu gelince, emin değilim.
Umarım yardımcı olur.


Benim ihtiyacım olduğunu düşünüyorum görünüm bir kaydırma için pencereyi "yapay" daha uzun yapmak için bir yoludur. Şu anda RelativeLayout android olarak ayarlandı: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis

O zaman bir çözüm bilmiyorum. Belki de genişlik ve yükseklik değerlerini ihtiyaçlarınıza göre "wrap_content" in çözdüğü değerlere göre daha fazla genişleterek manuel olarak ayarlamak isteyebilirsiniz.
Luis Miguel Serrano

1

bu tek satırı göreli etkinliğinize ekleyin; burada anahtar kartı kapağı text.inside onCreat () etkinlik yöntemini düzenler.

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

0

Bunun eski olduğunu biliyorum, ancak yukarıdaki çözümlerin hiçbiri benim için işe yaramadı. Kapsamlı hata ayıklamadan sonra sorunu anladım. Çözüm, android:windowTranslucentStatusstillerim.xml'de özniteliği false olarak ayarlıyor


0

EditText Alanı Klavye ile kaplanmışsa Aşağıdaki kodu kullanın:

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

İsterseniz İmleç kullanımı daha Odaklanmış EditText olmak EditText.requestFocus()sonra EditText?.getParent()?.requestChildFocus(EditText,EditText) Odaklanmış EditText içinde odağı ve İmleç almak için yardımcı olan.


-1

AndroidManifest.xml dosyanızı düzenleyin

android:windowSoftInputMode="adjustResize"

Bunu Layout dosyasının kök görünümüne ekleyin.

android:fitsSystemWindows="true"

Bu kadar.

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.