Cacher le clavier EditText quand Android: windowTranslucentStatus = true
Nous appliquons le nouveau thème translucide Android KitKat dans nos applications et nous avons un problème étrange lorsque le clavier apparaît. Si nous n'utilisons pas le nouvel attribut Android:windowTranslucentStatus
, tout fonctionne normalement: l'écran est redimensionné et tout reste visible. Mais lorsque nous utilisons Android:windowTranslucentStatus
, l'écran n'est pas redimensionné et notre EditText
est masqué par le clavier.
Un exemple du problème:
La seule différence entre les écrans réside dans l'attribut du style:
Premier écran: <item name="Android:windowTranslucentStatus">false</item>
Deuxième écran: <item name="Android:windowTranslucentStatus">true</item>
Nous pensons qu'il s'agit d'un bogue de la version KitKat, mais nous souhaitons que vous en soyez conscient. Nous devenons un peu en colère. Bien sûr, si quelqu'un a une solution, ce sera génial.
EDIT: Je viens d’ajouter ce problème au système de suivi des problèmes d’Android. Vous serez probablement intéressé par le problème: https://issuetracker.google.com/issues/36986276
J'ai aussi rencontré ce problème très ennuyant. Mais finalement, j'ai eu ce travail:
<style name="Theme.MyApp">
<item name="Android:windowTranslucentStatus">true</item>
</style>
Au lieu de définir fitSystemWindows = "true" dans le thème, je l'ai défini dans la vue racine de ma présentation.
<FrameLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:fitsSystemWindows="true"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<EditText
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</FrameLayout>
J'utilise aussi l'excellent SystemBarTintManager dans mon activité:
new SystemBarTintManager(this).setStatusBarTintEnabled(true);
Cela semble bien fonctionner, mais semble assez versatile. J'espère que ça aide quelqu'un quand même!
régler Android:windowSoftInputMode="adjustPan"
dans AndroidManifest.xml
est correct. Mais je veux juste dire que cela ne fonctionne pas lorsque l'activité est FullScreen, pour plus de détails, voir Android Comment ajuster la présentation en mode plein écran lorsque le clavier virtuel est visible
Une solution de contournement serait:
Ajoutez un Touch, Focus ou ClickListener et déplacez la disposition de modification de texte jusqu'à la moitié de l'écran. Cependant, ce n'est vraiment pas comme cela que cela devrait fonctionner, alors gardez les doigts croisés et espérons que Google le corrige.
EditText e = new EditText(this);
e.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
v.animate().x(screenHeight/2f).start();
else
v.animate().x(screenHeight).start();
}
});
Ajustez simplement v à votre disposition de maintien et assurez-vous que les positions que vous vous déplacez sont belles.
Ce n'est pas une solution parfaite, mais une solution que j'ai trouvée consistait à définir Android:windowSoftInputMode="adjustPan"
dans AndroidManifest.xml
.
Notez que cela déplacera toute la fenêtre du clavier plutôt que de la redimensionner.
Plus d'infos ici (recherche de windowSoftInputMode
).
mettre ceci en dessous des lignes après avoir créé dans votre activité
int currentapiVersion = Android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= Android.os.Build.VERSION_CODES.Lollipop) {
Window window = this.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(mCategoryColors.getColorStatusBar());
}
Travaille pour moi :)