Ich möchte meine Registerkarten so bearbeiten, dass sie windowSoftInputMode
für jede Registerkarte unterschiedliche Eigenschaften haben. Wie kann ich von der Java-Klasse aus auf diese Eigenschaft zugreifen, wenn die gesamte Bearbeitung Ihrer Registerkarte von einer einzigen Aktivität aus erfolgt?
Gibt es eine Möglichkeit, über Java-Code auf diese Manifest-Eigenschaft zuzugreifen?
adjustPan
undadjustResize
für denWindowManager.LayoutParams
Unterricht zuzugreifen , finden Sie viele nützliche Konstanten, die in dersetSoftInputMode
Methode verwendet werden könnengetWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Ich habe es bereits getestet und funktioniert wirklichWindow#setSoftInputMode
sindWindowManager.LayoutParams.SOFT_INPUT_*
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
Aber die Tastatur drückt immer noch mein FrameLayout nach oben, das über anderen Ansichten liegt. Aber genau das bleiben andere Ansichten an ihrer Stelle. Es funktioniert, wenn ich es im Manifest hinzufüge, aber ich möchte es nicht für die gesamte Aktivität anwenden.Laut Prashams Kommentar habe ich das getan und es hat mir dank ihm das Leben gerettet! Der
EditText
undSoftWindowInput
-Modus ist ziemlich fehlerhaft, wenn Sie ein Layout mit habenScrollView
und es dynamisch füllen.Da ich diesen Beitrag durchgesehen hatte, aber weiterhin andere Antworten / Kommentare gelesen hatte (wie Prashans), beschloss ich, ihn in einen neuen Beitrag zu schreiben.
Unter dem Code, den ich mit meinem verwendet habe
ScrollView
:Activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
quelle
Ich möchte zwei verschiedene Modi für Registerkarten verwenden. Die Modi sind
SOFT_INPUT_ADJUST_RESIZE
undSOFT_INPUT_ADJUST_NOTHING
.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
Die obige Codezeile funktioniert einfach nicht von alleine. App verhält sich immer in einem Zustand
ADJUST_NOTHING
. WennwindowSoftInputMode="adjustResize"
es jedoch in das<activity>
Tag in der Datei AndroidManifest.xml eingefügt wird , wird die Größe des App-Fensters standardmäßig geändert. Zusätzlich, wenn Sie folgende Zeile anrufengetWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
Es wird sich wie erwartet verhalten und die Größe wird nicht geändert.
PS Verbesserung der Antwort
quelle
windowSoftInputMode="adjustResize"
hilft die Einstellung im Manifest bei der späteren Behandlung dieses Flags. Insbesondere in einem Szenario, in dem Sie hauptsächlich Fragmente in einer einzelnen Aktivität haben. So kann man den Eingabestatus der Aktivität dynamisch ändern, indem man programmgesteuert vonSOFT_INPUT_ADJUST_RESIZE
zurück zuSOFT_INPUT_ADJUST_NOTHING
bei Bedarf wechselt. Schön!Sie können den folgenden Code programmgesteuert verwenden
android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
Danke Deepak
quelle
In Xamarin Android können Sie dies programmgesteuert tun
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.DetailDesign); Window.SetSoftInputMode(SoftInput.AdjustPan); }
quelle