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.
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.
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.
}
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
ajouter la propriété Android:imeOptions="flagNoExtractUi"
à chaque EditText
de votre fichier XML
.
La réponse ci-dessus m'a aidé à trouver la solution pour EditTexts ajouté dynamiquement:
editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
Utilisation Android:imeOptions="flagNoFullscreen"
pour obtenir cette fonctionnalité.
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);
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);
}
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é!
Ma solution:
Android:imeOptions="flagNoExtractUi|flagNoFullscreen"
Vous pouvez utiliser :
Android:imeOptions="flagNoFullscreen"
dans votre edittext
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();