Deaktivieren der Vollbild-Bearbeitungsansicht für Soft-Tastatureingaben im Querformat?

237

Auf Android-Geräten, die Softtastaturen verwenden, möchte ich verhindern, dass die Vollbild-Tastaturbearbeitungsansicht (siehe unten) im Querformat angezeigt wird (dh ich möchte nur die Softtastatur selbst und meine Ansicht dahinter sehen).

Ich gehe davon aus, dass dies mit der setExtractViewShown(false)Methode on erreicht werden kann, kann InputMethodServicejedoch nicht auf die Standardinstanz zugreifen und möchte keine benutzerdefinierte Eingabemethode implementieren.

Android-Vollbild-Bearbeitungsansicht

Bearbeitet, um hinzuzufügen: Die Ansicht, in die die Eingabe geht, ist keine TextView( Viewmit einer benutzerdefinierten InputConnectionImplementierung), android:imeOptions="flagNoExtractUi"funktioniert also hier nicht.

jnic
quelle
Lass es versuchen, es zu sehen. Es ist gut für dich. [Schau dir das an] [1] [1]: stackoverflow.com/questions/8648401/…
sonida
Ich habe ein ähnliches Problem :( Sie könnten eine Idee haben? stackoverflow.com/questions/36914290/…
railwanderer
2
Wie wird dies in der gesamten App angewendet? Wir werden den Attributwert nicht in jedem Edittext in XML hinzufügen.
Vikas Pandey
2
Viele der folgenden Antworten empfehlen die Verwendung von flagNoExtractUioder IME_FLAG_NO_EXTRACT_UI. In IME_FLAG_NO_EXTRACT_UIder entsprechenden Dokumentation für heißt flagNoExtractUies jedoch, dass "von der Verwendung dieses Flags abgeraten wird und es in Zukunft möglicherweise veraltet sein wird", ebenso flagNoFullscreenwie die empfohlene Option.
ThomasW

Antworten:

178

Ich habe endlich meine eigene Frage beantwortet:

Die Benutzeroberfläche zum Extrahieren (dh der Vollbild-Bearbeitungsmodus) kann an dem Punkt deaktiviert werden, an dem die Eingangsverbindung angeschlossen ist:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}
jnic
quelle
215
Einfach in deine XML-Datei android einfügen: imeOptions = "flagNoExtractUi"
1
jnic, wo hast du diese Überschreibung im Softtastaturcode gemacht? SoftKeyboard.java? Ich habe das gleiche Override ausprobiert und Fehler gemacht.
14
Sie werden wahrscheinlich das Flag zu den Optionen hinzufügen wollen, anstatt zu überschreiben, welche Optionen wie folgt übergeben wurden:outAttrs.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
ObsidianX
2
@ user726518 Wie wende ich dieses Attribut auf das Suchfeldelement in der Aktionsleiste an?
Menna-Allah Sami
1
Das einzige, was funktionierte, wenn die benutzerdefinierte Ansicht für die Tastatur verwendet wurde. Vielen Dank!
Herman
109

Navigieren Sie dazu zu Aktivität XML und fügen Sie android:imeOptions="flagNoExtractUi"Ihren Code ein. Aber wo soll es eingefügt werden? Schauen Sie sich den Code der Beispielaktivität xml an und schauen Sie sich EditText an:

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

Weitere Anpassungsoptionen für die Tastatur finden Sie unter http://developer.android.com/guide/topics/ui/controls/text.html

pbaranski
quelle
64

Fügen Sie die Eigenschaft android:imeOptions="flagNoExtractUi"jedem EditTextin Ihrer XMLDatei hinzu.

Michael Yaworski
quelle
1
Diese Antwort ist zu kurz und entspricht nicht den SO-Qualitätsstandards. Bitte verbessern Sie es, indem Sie einige zusätzliche Erklärungen hinzufügen, damit es für die Community und nicht nur für das OP nützlich ist.
Lorenzo Donati - Codidact.org
31
@ LorenzoDonati es ist genau das, was Sie tun müssen ... es ist eine sehr einfache Antwort, weil die Lösung sehr einfach ist und es nur eine andere Art ist, dies zu tun als die obigen Antworten. Außerdem können Antworten nicht "zu kurz" sein, es sei denn, sie beantworten die Frage IMO nicht.
Michael Yaworski
1
Sorry, aber das ist nicht das, was die SO-Community darüber denkt. Die Antworten sollten nicht auf die Lösung des OP-Problems beschränkt sein, sondern im Allgemeinen gute Antworten sein. Sehen Sie dies und das zum Beispiel.
Lorenzo Donati - Codidact.org
22
@ LorenzoDonati Es ist eine sehr spezifische Frage mit nur einem Endergebnis (aber mehreren Möglichkeiten, es zu lösen). Meine Antwort ist eine Ergänzung zu den anderen Antworten auf dieser Seite. ALLE Antworten auf dieser Seite beschränken sich nur auf das "OP-Problem", da dies die einzige Art von Antwort ist, die geschrieben werden kann. Wie ich schon sagte, es ist spezifisch und einfach.
Michael Yaworski
2
Endlich fand ich die Antwort. Vielen Dank @mike yaworski
Drx
53

Die obige Antwort hat mir geholfen, die Lösung für dynamisch hinzugefügte EditTexts zu finden:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Abdo
quelle
37

Verwenden Sie android:imeOptions="flagNoFullscreen"diese Option , um diese Funktion zu erreichen.

Ridoy
quelle
1
netter und besserer Ansatz, um in XML zu schreiben. Funktioniert bei mir. Vielen Dank
Ahesanali Suthar
1
Beachten Sie, dass in der Dokumentation für IME_FLAG_NO_EXTRACT_UI, die entspricht flagNoExtractUi, angegeben ist, dass "die Verwendung dieses Flags nicht flagNoFullscreenempfohlen wird und es in Zukunft möglicherweise veraltet sein wird", ebenso wie die empfohlene Option.
ThomasW
12

Wenn Sie mehrere imeOptions programmatisch kombinieren möchten, können Sie auch | verwenden Syntax.

Um beispielsweise die Vollbild-Bearbeitungsansicht im Querformat zu deaktivieren und die Taste "Weiter" durch die Taste "OK" (ACTION_DONE) auf der Tastatur zu ersetzen, können Sie Folgendes verwenden:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Maxime Ancelin
quelle
9

Wenn Sie den IME direkt ändern, können Sie verhindern, dass jemals eine ExtractedView angezeigt wird, indem Sie Folgendes überschreiben onUpdateExtractingVisibility:

@Override
public void onUpdateExtractingVisibility(EditorInfo ei) {
    ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI;
    super.onUpdateExtractingVisibility(ei);
}
ObsidianX
quelle
6

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 eine enthält EditText an der Spitze der es und ich brauchte Funktion zum automatischen Vervollständigung bei dieser Suche implementieren Aktivität , die die Überlappung Die Tastatur verursachte ein Problem, bei dem der Benutzer das Ergebnis von RecyclerView nicht sehen konnte . Also hatte ich diesen 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"  />

Prost!

Arefeh Iravanchi
quelle
5

Meine Lösung:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"
Dastan
quelle
Dies ist eine aktuellere Antwort.
alierdogan7
2

Sie können verwenden:

android:imeOptions="flagNoFullscreen" 

in deinem edittext

Thientvse
quelle
1
Ist das eine Antwort?
Artgb
Ich versuche es und es funktioniert für mich! (Mein Gerät ist Android 4.1.2)
Thientvse
0

Sie können anrufen, um die Softtastatur auszublenden und den Fokus in der Suchansicht zu löschen.

public void hideKeyboard(View view) {
    InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

super.clearFocus();
mohamed elagamy
quelle