web-dev-qa-db-fra.com

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: http://fewlaps.com/xtra/quitnowStackoverflow.png

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

32
Roc Boronat

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!

8
DanielGrech

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

0
leimenghao

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.

0
bluewhile

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).

0
Matt Lyons

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 :)