Désactivation de l'affichage d'édition plein écran pour la saisie du clavier souple dans le paysage?

StackOverflow https://stackoverflow.com/questions/4336762

Question

Sur les appareils Android qui utilisent des claviers doux, je veux empêcher la Editing clavier plein écran (ci-dessous) d'apparaître en mode paysage (par exemple je veux voir que le clavier logiciel lui-même et moi derrière).

Je suppose que cela peut être réalisé en utilisant la méthode de setExtractViewShown(false) sur InputMethodService, mais je ne peux pas accéder à l'instance par défaut de cela et ne veux pas mettre en œuvre une méthode d'entrée personnalisée.

Editing Android fullscreen

Edité pour ajouter:. la vue à laquelle l'entrée va est pas un TextView (c'est un View avec une implémentation InputConnection personnalisée), donc android:imeOptions="flagNoExtractUi" ne fonctionnera pas ici

Était-ce utile?

La solution

enfin répondu à ma propre question:

L'interface utilisateur de l'extrait (à savoir le mode d'édition de grand écran) peut être désactivé à l'endroit où la connexion d'entrée est relié:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}

Autres conseils

Pour ce faire, accédez à XML d'activité et coller android:imeOptions="flagNoExtractUi" dans votre code. Mais où doit-il être collé? Avoir à regarder le code d'exemple l'activité xml et regardez 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>

Si vous voulez plus d'options de personnalisation pour le clavier voir http: / /developer.android.com/guide/topics/ui/controls/text.html

ajouter la propriété android:imeOptions="flagNoExtractUi" à chaque EditText dans votre fichier XML.

La réponse ci-dessus m'a aidé à comprendre la solution pour EditTexts dynamiquement ajouté:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);

Utilisez android:imeOptions="flagNoFullscreen" pour obtenir cette fonctionnalité.

En outre, si vous voulez combiner plusieurs imeOptions programaticaly, vous pouvez utiliser le | syntaxe.

Par exemple, pour désactiver l'affichage en mode paysage plein écran modifier et remplacer « Next » clé par « OK » (ACTION_DONE) dans le clavier, vous pouvez utiliser:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI);

Si vous modifiez l'IME directement, vous pouvez l'empêcher d'afficher toujours une ExtractedView en remplaçant onUpdateExtractingVisibility :

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

Je sais qu'il est un peu tard, mais pour tous ceux qui est toujours intéressé, voici ma solution: Dans mon cas, j'avais un paysage Activité contenant EditText en haut de celui-ci et je devais mettre en œuvre autocomplete fonctionnalité dans cette recherche Activité la clavier chevauchant un problème qui a causé l'utilisateur n'a pas pu voir le résultat de RecyclerView . Donc, je fini par avoir cette EditText dans ma mise en page:

<EditText
  android:layout_width="match_parent"
  android:layout_height="?actionBarSize"
  android:id="@+id/main_search_et"
  android:imeOptions="actionSearch|flagNoExtractUi"
  android:inputType="text"  />

Vive!

Vous pouvez utiliser:

android:imeOptions="flagNoFullscreen" 

dans votre edittext

Ma solution:

android:imeOptions="flagNoExtractUi|flagNoFullscreen"

Vous pouvez appeler pour cacher le clavier souple et se concentrer clairement SearchView.

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

super.clearFocus();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top