Chcę, aby moje karty miały różne windowSoftInputMode
właściwości dla każdej karty. Jak uzyskać dostęp do tej właściwości z klasy java, gdy cała obsługa karty jest wykonywana z jednego działania?
Czy istnieje sposób, aby uzyskać dostęp do tej właściwości manifestu z kodu Java?
adjustPan
iadjustResize
możesz przejść doWindowManager.LayoutParams
klasy, możesz znaleźć wiele przydatnych stałych, które mogą być użyte wsetSoftInputMode
metodziegetWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
już to przetestowałem i naprawdę działaWindow#setSoftInputMode
toWindowManager.LayoutParams.SOFT_INPUT_*
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
ale klawiatura nadal podnosi mój układ FrameLayout, który znajduje się nad innymi widokami. Ale po prostu inne poglądy pozostają na swoim miejscu. Działa, gdy dodam go do Manifestu, ale nie chcę go stosować do całego Działania.Zgodnie z komentarzem Prashama , zrobiłem to i dzięki niemu uratowałem mi życie!
EditText
ISoftWindowInput
tryb są dość buggy gdy masz układ zScrollView
i wypełniają je dynamicznie.Ponieważ przejrzałem ten post, ale nadal czytałem inne odpowiedzi / komentarze (takie jak Prashan), zdecydowałem się napisać go w nowym poście.
Poniżej kod, którego użyłem z moim
ScrollView
:Activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
źródło
Staram się używać dwóch różnych trybów dla kart. Dostępne tryby to
SOFT_INPUT_ADJUST_RESIZE
iSOFT_INPUT_ADJUST_NOTHING
.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Powyższa linia kodu po prostu nie działa sama. Aplikacja zawsze zachowuje się w stanie
ADJUST_NOTHING
. Jeśli jednakwindowSoftInputMode="adjustResize"
zostanie wstawiony do<activity>
tagu w pliku AndroidManifest.xml, rozmiar okna aplikacji zostanie domyślnie zmieniony. Dodatkowo, gdy dzwonisz do następnej liniigetWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
będzie zachowywać się zgodnie z oczekiwaniami i nic nie będzie zmieniane.
Poprawa PS do odpowiedzi
źródło
windowSoftInputMode="adjustResize"
w manifeście pomaga później w obsłudze tej flagi. Szczególnie w scenariuszu, w którym masz głównie fragmenty w pojedynczym działaniu. Można więc dynamicznie zmieniać stan wejściowy działania, programowo przełączając się zSOFT_INPUT_ADJUST_RESIZE
powrotemSOFT_INPUT_ADJUST_NOTHING
na żądanie. Niezłe!W Xamarin Android możesz to zrobić programowo w ten sposób
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.DetailDesign); Window.SetSoftInputMode(SoftInput.AdjustPan); }
źródło
Możesz programowo użyć następującego kodu
android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Dzięki Deepak
źródło