web-dev-qa-db-fra.com

Désactiver l'affichage en plein écran pour la saisie au clavier en mode paysage?

Sur les appareils Android qui utilisent un clavier logiciel), je souhaite empêcher l'affichage de la vue d'édition du clavier plein écran (illustrée ci-dessous) en mode paysage (c.-à-d. Je veux uniquement voir le clavier virtuel et mon affichage. derrière).

Je suppose que cela peut être réalisé à l'aide de la méthode setExtractViewShown(false) sur InputMethodService, mais je ne parviens pas à accéder à l'instance par défaut de cette opération et ne souhaite pas implémenter une méthode d'entrée personnalisée.

Android fullscreen editing view

Modifié pour ajouter: la vue dans laquelle l'entrée est en cours n'est pas un TextView (c'est un View avec une implémentation personnalisée de InputConnection), donc Android:imeOptions="flagNoExtractUi" ne fonctionnera pas ici.

221
jnic

J'ai enfin répondu à ma propre question:

L’interface utilisateur d’extrait (c’est-à-dire le mode d’édition en plein écran) peut être désactivée au moment où la connexion d’entrée est connectée:

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI;

    // etc.
}
164
jnic

Pour ce faire, accédez à activity xml et collez Android:imeOptions="flagNoExtractUi" dans votre code. Mais où doit-il être collé? Regardez le code de l'exemple d'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 souhaitez plus d'options de personnalisation pour le clavier, voir http://developer.Android.com/guide/topics/ui/controls/text.html

96
pbaranski

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

62
Michael Yaworski

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

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
50
Abdo

Utilisation Android:imeOptions="flagNoFullscreen" pour obtenir cette fonctionnalité.

37
ridoy

De plus, si vous souhaitez combiner plusieurs programmes imeOptions, vous pouvez utiliser la commande | syntaxe.

Par exemple, pour désactiver l'affichage en plein écran en mode paysage et remplacer la touche "Suivant" par "OK" (ACTION_DONE) au clavier, vous pouvez utiliser:

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

Si vous modifiez directement l'IME, vous pouvez empêcher celui-ci d'afficher un ExtracedView en remplaçant onUpdateExtractingVisibility :

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

Je sais que c'est un peu tard, mais pour ceux qui sont toujours intéressés, voici ma solution: Dans mon cas, j'avais un paysage Activité contenant un EditText en haut de celui-ci et J'avais besoin d'implémenter la fonctionnalité de saisie semi-automatique dans cette recherche Activité. Le clavier qui se chevauchait était à l'origine d'un problème que l'utilisateur ne voyait pas comme résultat de RecyclerView. Donc, j'ai fini par avoir ceci 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"  />

À votre santé!

5
Arefeh Iravanchi

Ma solution:

Android:imeOptions="flagNoExtractUi|flagNoFullscreen"
2
dastan

Vous pouvez utiliser :

Android:imeOptions="flagNoFullscreen" 

dans votre edittext

2
Thientvse

Vous pouvez appeler pour masquer le clavier logiciel et effacer le focus de searchview.

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

super.clearFocus();
0
mohamed elagamy