Android: windowSoftInputMode değerini java sınıfından değiştirmenin herhangi bir yolu var mı?


82

Her sekme için farklı windowSoftInputModeözelliklere sahip olmak üzere sekmelerimle işlem yapmak istiyorum . Sekmenizin tüm işlemleri tek bir etkinlikten yapıldığında bu özelliğe java sınıfından nasıl erişilir?

Bu manifest özelliğine java kodundan erişmenin herhangi bir yolu var mı?

Yanıtlar:


124

Bir Activity için softInputMode'u değiştirmek için aşağıdakileri kullanın.

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

EditText için softInput türünü değiştirmek için aşağıdakileri kullanın.

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

Düzeltme için @Eliezer'e teşekkürler


20
Gibi erişim özelliklerine için: Bu setSoftInputMode yöntemi için teşekkürler ... Gerçekten ... Ek bilgi bana yardımcı oldu adjustPanve adjustResizesizin için gidebilirsiniz WindowManager.LayoutParamsEğer kullanılabilecek birçok kullanışlı sabitleri bulabilirsiniz, sınıf setSoftInputModeyöntemiyle
Prasham

7
@SureshBora @ 66CLSjY cevabını ve @aman'ı birleştirdim ve sonunda bunu anladım: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);Zaten test ettim ve gerçekten işe yarıyor
Humberto Castañeda

1
Bu nasıl doğru cevap? Uyarınca developer.android.com/reference/android/view/... sadece kabul edilebilir değerler geçmek Window#setSoftInputModeolanWindowManager.LayoutParams.SOFT_INPUT_*
Eliezer

4
@ 66CLSjY Benim için çalışmıyor. Bana neyi kaçırdığımı söyleyebilir misin? Buna bir etkinlik içinde diyorum: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);Ama klavye hala diğer görünümlerin üstünde olan FrameLayout'umu yukarı itiyor. Ama sadece bu, diğer görüşler onların yerinde kalır. Manifest'e eklediğimde işe yarıyor, ancak tüm Aktivite için uygulamak istemiyorum.
Tamás Kozmér

1
OnCreate () 'de setContentView'den önce setSoftInputMode'u çağırdınız mı?
AjOnFire

36

Prasham'ın yorumuna göre , bunu yaptım ve onun sayesinde hayatımı kurtardı! EditTextVe SoftWindowInputsen bir düzen varken modu oldukça arabası vardır ScrollViewve dinamik olarak dolduruyor.

Bu yazıyı gözden geçirdiğim ve diğer cevapları / yorumları okumaya devam ettiğim için (Prashan'ın cevabı gibi), yeni bir gönderide yazmaya karar verdim.

Benimle kullandığım kodun altında ScrollView:

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

7
merhaba aman, cevabını burada okumak biraz zor. Prashan'a minnettar olduğunuzu görebiliyorum, ancak lütfen kişisel yorumlarınızdan bazılarını silerek bu kodun neyi çözmeye yardımcı olacağını açıklayabilir misiniz? Teşekkürler.
Taryn East

1
Hm, en azından tavayı ayarlamak için çalışmıyor. Sadece manifestoya koyarsam çalışır.
Ixx

Bu uygulamanın çökmesine neden oluyor.
Farrakh Javed

10

Sekmeler için iki farklı mod kullanmayı hedefliyorum. Modlar SOFT_INPUT_ADJUST_RESIZEve SOFT_INPUT_ADJUST_NOTHING.

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

Yukarıdaki kod satırı kendi başına çalışmıyor. Uygulama her zaman bir durumda davranır ADJUST_NOTHING. Ancak, windowSoftInputMode="adjustResize"içine yerleştirilir <activity>AndroidManifest.xml dosyasında etiketi, uygulama penceresi varsayılan olarak boyutlandırılır. Ayrıca aşağıdaki hattı aradığınızda

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

beklendiği gibi davranır ve hiçbir şey yeniden boyutlandırılmaz.

Cevaba PS iyileştirme


1
RESIZE ve HİÇBİR ŞEY arasında karıştırmaya ihtiyacım var, bunu nasıl yapabilirim, programatik olarak hiçbir şeye geri döndüğümde, yeniden boyutlandırmak için değişmez.
Taranmeet Singh

1
Bu gerçekten güzel bir gözlem. windowSoftInputMode="adjustResize"Manifest'te temel olarak ayarlama , bu bayrağın daha sonra ele alınmasına yardımcı olur. Özellikle, Tek Aktivitede Çoğunlukla Parçaların olduğu bir senaryoda. Böylece, programatik olarak SOFT_INPUT_ADJUST_RESIZE geri SOFT_INPUT_ADJUST_NOTHING talep üzerine geçiş yaparak Aktivitenin giriş durumunu dinamik olarak değiştirmeye devam edebilirsiniz . Güzel bir!
sud007

1

Xamarin Android'de Programatik Olarak Bunu Yapabilirsiniz

 protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.DetailDesign);
             Window.SetSoftInputMode(SoftInput.AdjustPan);
        }

0

Aşağıdaki kodu programlı olarak kullanabilirsiniz

android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

Teşekkürler Deepak

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.