Chaque fois que le clavier logiciel apparaît, il redimensionne l'image d'arrière-plan. Reportez-vous à la capture d'écran ci-dessous:
Comme vous pouvez le voir, l'arrière-plan est en quelque sorte pressé. N'importe qui peut expliquer pourquoi l'arrière-plan est redimensionné?
Ma mise en page est la suivante:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/page_bg"
android:isScrollContainer="false"
>
<LinearLayout android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_width="fill_parent"
>
<EditText android:id="@+id/CatName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="textCapSentences"
android:lines="1"
/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save"
android:onClick="saveCat"
/>
</LinearLayout>
<ImageButton
android:id="@+id/add_totalk"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="@null"
android:src="@drawable/add_small"
android:scaleType="center"
android:onClick="createToTalk"
android:layout_marginTop="5dp"
/>
</LinearLayout>
android
view
android-linearlayout
Andreas Wong
la source
la source
J'ai rencontré le même problème en développant une application de chat, un écran de chat avec une image de fond.
android:windowSoftInputMode="adjustResize"
pressé mon image d'arrière-plan pour l'adapter à l'espace disponible après que le clavier virtuel a été affiché et "AdjustPan" a déplacé toute la disposition vers le haut pour ajuster le clavier logiciel. La solution à ce problème était de définir l'arrière-plan de la fenêtre au lieu d'un arrière-plan de mise en page dans un XML d'activité. UtilisezgetWindow().setBackgroundDrawable()
dans votre activité.la source
Voici la meilleure solution pour éviter ce genre de problème.
Étape 1: créer un style
Étape 2: définissez votre style d'activité dans le
AndroidManifest
fichierla source
Grâce à Android: windowSoftInputMode = "AdjustPan" donnant une mauvaise expérience utilisateur car à travers tout cet écran va en haut (décalage vers le haut) Donc, la suite est l'une des meilleures réponses.
J'ai le même problème mais après cela, j'ai trouvé des réponses géniales de @Gem
Dans Manifest
En xml
Ne définissez aucun arrière-plan ici et gardez votre vue sous ScrollView
En Java
Vous devez définir l'arrière-plan de la fenêtre:
Merci à @Gem.
la source
juste pour l'addition ...
si vous avez une vue de liste sur votre activité, vous devez l'ajouter
android:isScrollContainer="false"
dans vos propriétés de vue de liste ...et n'oubliez pas d'ajouter
android:windowSoftInputMode="adjustPan"
votre manifeste xml à votre activité ...si vous utilisez
android:windowSoftInputMode="adjustUnspecified"
une vue déroulante sur votre mise en page, votre arrière-plan sera toujours redimensionné par le clavier virtuel ...il serait préférable d'utiliser la valeur "AdjustPan" pour empêcher le redimensionnement de votre arrière-plan ...
la source
Au cas où quelqu'un a besoin d'un
adjustResize
comportement et ne veut pas que le sienImageView
soit redimensionné, voici une autre solution de contournement.Mettez simplement à l'
ImageView
intérieurScrollView
=>RelativeLayout
avecScrollView.fillViewport = true
.la source
J'ai rencontré le problème principal en travaillant sur mon application. Dans un premier temps, j'utilise la méthode fournie par @parulb pour résoudre le problème. Merci beaucoup. Mais plus tard, j'ai remarqué que l'image de fond est partiellement masquée par la barre d'action (et la barre d'état j'en suis sûr). Ce petit numéro est déjà proposé par @ zgc7009 qui a commenté ci-dessous la réponse de @parulb il y a un an et demi mais personne n'a répondu.
J'ai travaillé toute une journée pour trouver un moyen et heureusement, je peux au moins résoudre parfaitement ce problème sur mon téléphone portable maintenant.
Nous avons d'abord besoin d'une ressource de liste de calques dans un dossier pouvant être dessiné pour ajouter un remplissage en haut de l'image d'arrière-plan:
Deuxièmement, nous définissons ce fichier comme ressource pour l'arrière-plan comme mentionné ci-dessus:
J'utilise Nexus 5. J'ai trouvé un moyen d'obtenir la hauteur de la barre d'action en xml mais pas la barre d'état, donc je dois utiliser une hauteur fixe de 75dp pour le rembourrage supérieur. J'espère que tout le monde pourra trouver la dernière pièce de ce puzzle.
la source
J'ai souffert de problèmes similaires, mais il semble que l'utilisation de
adjustPan
avecandroid:isScrollContainer="false"
ne corrige toujours pas ma mise en page (qui était un RecyclerView sous un LinearLayout). Le RecyclerView était bien, mais à chaque fois que le clavier virtuel apparaissait, le LinearLayout était réajusté.Pour éviter ce comportement (je voulais simplement que le clavier passe par-dessus ma disposition), j'ai choisi le code suivant:
Cela indique à Android de laisser votre mise en page seule lorsque le clavier virtuel est appelé.
Vous trouverez plus de lecture sur les options possibles ici (bien que curieusement, il ne semble pas qu'il y ait une entrée pour
adjustNothing
).la source
Après avoir étudié et mis en œuvre toutes les réponses disponibles, j'ajoute ici une solution.
Cette réponse est une combinaison de code de:
https://stackoverflow.com/a/45620231/1164529
https://stackoverflow.com/a/27702210/1164529
Voici la
AppCompatImageView
classe personnalisée qui n'a montré aucun clavier logiciel d'étirement ou de défilement: -Pour l'utiliser comme arrière-plan de ma
Fragment
classe, je l'ai défini comme premier élément surFrameLayout
.la source
Ajoutez cette ligne dans le fichier AndroidManifest.xml :
reportez-vous à ce lien pour plus d'informations.
la source
Utilisez simplement dans votre
onCreate()
code:et éliminez cette ligne dans votre xml:
Lire la suite sur:
http://developer.android.com/reference/android/view/Window.html
merci pour: Adrian Cid Almaguer
la source
J'ai été confronté à ce problème, lorsque mon image d'arrière-plan n'était qu'un
ImageView
intérieur aFragment
, et elle a été redimensionnée par le clavier.Ma solution était la suivante: utiliser la personnalisation
ImageView
de cette réponse SO , modifiée pour être compatible avecandroidx
.la source
Ajoutez simplement votre activité
la source
J'ai fait face au même problème avant mais aucune solution n'a fonctionné pour moi si longtemps parce que j'utilisais un
Fragment
, et aussigetActivity().getWindow().setBackgroundDrawable()
n'était pas non plus une solution pour moi.La solution qui a fonctionné pour moi est de remplacer
FrameLayout
par une logique pour gérer le clavier qui devrait apparaître et changer le bitmap en déplacement.Voici mon code FrameLayout (Kotlin):
Et je l'ai utilisé comme un arrière-plan FrameLayout habituel.
frameLayout.backgroundImage = Drawable.createFromPath(path)
J'espère que ça aide.
la source
Vous pouvez envelopper votre LinearLayout avec FrameLayout et ajouter ImageView avec arrière-plan:
Et vous pouvez le définir en hauteur lorsque vous créez une activité / fragment (pour éviter la mise à l'échelle lorsque le clavier est ouvert). Un peu de code dans Kotlin de Fragment:
la source
si vous définissez l'image comme arrière-plan de la fenêtre et que l'interface utilisateur va rester bloquée. alors il peut y avoir une possibilité que vous utilisiez drawable qui est dans un seul dossier dessinable, si oui, vous devez le coller dans drawable-nodpi ou drawable-xxxhdpi.
la source
Ma solution est de remplacer l'arrière-plan de la fenêtre par celui de la mise en page, puis de définir l'arrière-plan de la mise en page sur null. De cette façon, je garde l'image dans la fenêtre d'aperçu XML:
Alors gardez l'arrière-plan dans la mise en page et ajoutez un identifiant pour cela. Ensuite, dans l'activité onCreate (), mettez ce code:
la source