Désactivation de l'affichage d'édition plein écran pour la saisie du clavier souple dans le paysage?
-
30-09-2019 - |
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.
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
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();