Deaktivieren der Vollbild-Bearbeitungsansicht für weiche Tastatureingabe in der Landschaft?
-
30-09-2019 - |
Frage
Auf Android-Geräten, die Soft-Tastaturen verwenden, möchte ich die Vollbild-Tastatur verhindern Ansicht Bearbeitung (siehe unten) angezeigt wird, wenn im Querformat (dh ich will selbst nur die Soft-Tastatur sehen, und meiner Meinung nach dahinter).
gehe ich davon aus dem erreicht werden kann, die setExtractViewShown(false)
Methode auf InputMethodService
, aber ich bin nicht in der Lage die Standardinstanz von dieser für den Zugriff auf und will nicht eine benutzerdefinierte Eingabemethode implementieren.
Edited hinzufügen:. die Ansicht, den Eingang geht, ist kein TextView
(es ist ein View
mit einer benutzerdefinierten InputConnection
Implementierung), so android:imeOptions="flagNoExtractUi"
wird hier nicht funktionieren
Lösung
I schließlich , antwortete meine eigene Frage:
Der Extrakt UI (das heißt, die Vollbild-Editiermodus) kann, bei dem an der Stelle gesperrt wird der Eingangsanschluss angeschlossen ist:
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;
// etc.
}
Andere Tipps
Um das zu tun, dorthin zu navigieren Aktivität xml und fügen android:imeOptions="flagNoExtractUi"
in Ihrem Code. Aber wo sollte es eingefügt werden? Haben Blick auf Code beispiel Aktivität xml und Blick auf EditText:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:imeOptions="flagNoExtractUi"
android:id="@+id/etTextInAct"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10" >
<requestFocus />
</EditText>
</LinearLayout>
Wenn Sie mehr Anpassungsmöglichkeiten für die Tastatur wollen sehen http: / /developer.android.com/guide/topics/ui/controls/text.html
fügen Sie die Eigenschaft android:imeOptions="flagNoExtractUi"
zu jedem EditText
in Ihrer XML
Datei.
Die Antwort oben hat mir geholfen, die Lösung herauszufinden, für dynamisch hinzugefügt EditTexts:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Verwenden android:imeOptions="flagNoFullscreen"
diese Funktion zu erreichen.
Auch wenn Sie programaticaly mehrere imeOptions kombinieren möchten, können Sie die Verwendung | Syntax.
Zum Beispiel, um die Vollbild-Bearbeitungsansicht in der Landschaft deaktivieren und auf „Weiter“ Taste „OK“ (ACTION_DONE) in Tastatur zu ersetzen, können Sie verwenden:
editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Wenn Sie die IME direkt sind modifizieren Sie es jemals eine ExtractedView Anzeige durch Überschreiben verhindern onUpdateExtractingVisibility
:
@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
super.onUpdateExtractingVisibility(ei);
}
Ich weiß, es ist ein wenig spät, aber für alle, die immer noch daran interessiert ist, hier ist meine Lösung: In meinem Fall hatte ich eine Landschaft Aktivität , das eine EditText an der Spitze der es und ich brauchte Funktion zum automatischen Vervollständigung bei dieser Suche Aktivität , zu implementieren, die der überlappende Tastatur verursachte ein Problem, dass der Benutzer nicht Ergebnis von RecyclerView sehen konnte, . So beenden ich dieses mit bis EditText in meinem Layout:
<EditText
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:id="@+id/main_search_et"
android:imeOptions="actionSearch|flagNoExtractUi"
android:inputType="text" />
Cheers!
Sie können mit:
android:imeOptions="flagNoFullscreen"
in Ihrem EditText
Meine Lösung:
android:imeOptions="flagNoExtractUi|flagNoFullscreen"
Sie können auch anrufen Soft-Tastatur und klare Fokussierung von Search zu verbergen.
public void hideKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
super.clearFocus();