Immer wenn die Softwaretastatur angezeigt wird, wird die Größe des Hintergrundbilds geändert. Siehe den Screenshot unten:
Wie Sie sehen können, ist der Hintergrund irgendwie zusammengedrückt. Jeder kann ein Licht darauf werfen, warum die Größe des Hintergrunds geändert wird.
Mein Layout ist wie folgt:
<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
quelle
quelle
Ich hatte das gleiche Problem bei der Entwicklung einer Chat-App, eines Chat-Bildschirms mit einem Hintergrundbild.
android:windowSoftInputMode="adjustResize"
drückte mein Hintergrundbild auf den verfügbaren Platz, nachdem die Softtastatur angezeigt wurde, und "adjustPan" verschob das gesamte Layout nach oben, um die Softtastatur anzupassen. Die Lösung für dieses Problem bestand darin, den Fensterhintergrund anstelle eines Layouthintergrunds in einem Aktivitäts-XML festzulegen. Verwenden SiegetWindow().setBackgroundDrawable()
in Ihrer Aktivität.quelle
Hier ist die beste Lösung, um solche Probleme zu vermeiden.
Schritt 1: Erstellen Sie einen Stil
Schritt 2: Legen Sie Ihren Aktivitätsstil in der
AndroidManifest
Datei festquelle
Durch Android: windowSoftInputMode = "adjustPan", was zu einer schlechten Benutzererfahrung führt, da der gesamte Bildschirm oben angezeigt wird (nach oben verschieben). Das Folgende ist also eine der besten Antworten.
Ich habe das gleiche Problem, aber danach habe ich fantastische Antworten vom @Gem gefunden
Im Manifest
In XML
Stellen Sie hier keinen Hintergrund ein und behalten Sie Ihre Ansicht unter ScrollView
In Java
Sie müssen den Hintergrund auf Fenster einstellen:
Danke an @Gem.
quelle
nur zur Ergänzung ...
Wenn Sie eine Listenansicht für Ihre Aktivität haben, müssen Sie diese
android:isScrollContainer="false"
in Ihren Listenansichtseigenschaften hinzufügen ...und vergessen Sie nicht,
android:windowSoftInputMode="adjustPan"
bei Ihrer Aktivität Ihr Manifest-XML hinzuzufügen ...Wenn Sie eine
android:windowSoftInputMode="adjustUnspecified"
scrollbare Ansicht für Ihr Layout verwenden, wird die Größe Ihres Hintergrunds weiterhin über die Softtastatur geändert ...Es ist besser, wenn Sie den Wert "adjustPan" verwenden, um zu verhindern, dass die Größe Ihres Hintergrunds geändert wird ...
quelle
Falls jemand ein
adjustResize
Verhalten benötigt und nicht möchte, dass seineImageView
Größe geändert wird, ist dies eine weitere Problemumgehung.Einfach
ImageView
hineinsteckenScrollView
=>RelativeLayout
mitScrollView.fillViewport = true
.quelle
Bei der Arbeit an meiner App ist das Hauptproblem aufgetreten. Zuerst benutze ich die von @parulb bereitgestellte Methode, um das Problem zu lösen. Vielen Dank. Aber später bemerkte ich, dass das Hintergrundbild teilweise durch die Aktionsleiste (und die Statusleiste, da bin ich mir sicher) ausgeblendet ist. Dieses kleine Problem wurde bereits von @ zgc7009 vorgeschlagen, der vor anderthalb Jahren die Antwort von @parulb kommentierte, aber niemand antwortete.
Ich habe einen ganzen Tag gearbeitet, um einen Weg zu finden, und zum Glück kann ich dieses Problem jetzt zumindest auf meinem Handy perfekt lösen.
Zuerst benötigen wir eine Ressourcenliste für Ebenenlisten in einem zeichnbaren Ordner, um dem Hintergrundbild oben eine Auffüllung hinzuzufügen:
Zweitens setzen wir diese Datei als Ressource für den Hintergrund wie oben erwähnt:
Ich verwende Nexus 5. Ich habe einen Weg gefunden, die Höhe der Aktionsleiste in XML zu ermitteln, aber nicht die Statusleiste. Daher muss ich für die obere Polsterung eine feste Höhe von 75 dp verwenden. Hoffe, jeder kann das letzte Stück dieses Puzzles finden.
quelle
Ich hatte ähnliche Probleme, aber es scheint, als hätte die Verwendung
adjustPan
mitandroid:isScrollContainer="false"
mein Layout immer noch nicht behoben (dies war eine RecyclerView unter einem LinearLayout). Das RecyclerView war in Ordnung, aber jedes Mal, wenn die virtuelle Tastatur angezeigt wurde, wurde das LinearLayout neu angepasst.Um dieses Verhalten zu verhindern (ich wollte einfach, dass die Tastatur mein Layout durchläuft), habe ich den folgenden Code verwendet:
Dies weist Android an, Ihr Layout grundsätzlich in Ruhe zu lassen, wenn die virtuelle Tastatur aufgerufen wird.
Weitere Informationen zu möglichen Optionen finden Sie hier (obwohl es seltsamerweise keinen Eintrag für gibt
adjustNothing
).quelle
Nachdem ich alle verfügbaren Antworten studiert und implementiert habe, füge ich hier eine Lösung hinzu.
Diese Antwort ist eine Kombination aus Code aus:
https://stackoverflow.com/a/45620231/1164529
https://stackoverflow.com/a/27702210/1164529
Hier ist die benutzerdefinierte
AppCompatImageView
Klasse, die kein Dehnen oder Scrollen auf der Softtastatur zeigte: -Um es als Hintergrund für meine
Fragment
Klasse zu verwenden, habe ich es als erstes Element auf gesetztFrameLayout
.quelle
Fügen Sie diese Zeile in die Datei AndroidManifest.xml ein :
beziehen sich auf diesen Link für weitere Informationen.
quelle
Verwenden Sie einfach in
onCreate()
diesem Code:und entfernen Sie diese Zeile in Ihrer XML:
Lesen Sie mehr unter:
http://developer.android.com/reference/android/view/Window.html
Danke für: Adrian Cid Almaguer
quelle
Ich mit diesem Problem konfrontiert, als mein Hintergrundbild war nur ein
ImageView
innen einFragment
, und es wurde von der Tastatur verkleinert.Meine Lösung war: Verwenden von benutzerdefinierten
ImageView
aus dieser SO-Antwort , bearbeitet, um kompatibel zu seinandroidx
.quelle
Fügen Sie einfach Ihre Aktivität hinzu
quelle
Ich hatte das gleiche Problem schon einmal, aber keine Lösung hat für mich so lange funktioniert, weil ich eine verwendet habe
Fragment
und auchgetActivity().getWindow().setBackgroundDrawable()
keine Lösung für mich war.Die Lösung, die für mich funktioniert hat, besteht darin,
FrameLayout
eine Logik für die Tastatur zu überschreiben , die angezeigt werden soll, und die Bitmap unterwegs zu ändern.Hier ist mein FrameLayout-Code (Kotlin):
Und ich habe es wie den Hintergrund eines normalen FrameLayout verwendet.
frameLayout.backgroundImage = Drawable.createFromPath(path)
Ich hoffe es hilft.
quelle
Sie können Ihr LinearLayout mit FrameLayout umschließen und ImageView mit Hintergrund hinzufügen:
Sie können die Höhe beim Erstellen von Aktivitäten / Fragmenten festlegen (um eine Skalierung beim Öffnen der Tastatur zu verhindern). Ein Code in Kotlin aus Fragment:
quelle
Wenn Sie das Bild als Fensterhintergrund festlegen und die Benutzeroberfläche hängen bleibt. Dann besteht möglicherweise die Möglichkeit, dass Sie drawable verwenden, das sich in einem einzelnen zeichnbaren Ordner befindet. Wenn ja, müssen Sie es in drawable-nodpi oder drawable-xxxhdpi einfügen.
quelle
Meine Lösung besteht darin, den Hintergrund des Fensters durch den des Layouts zu ersetzen und dann den Layouthintergrund auf Null zu setzen. Auf diese Weise behalte ich das Bild im XML-Vorschaufenster:
Behalten Sie also den Hintergrund im Layout bei und fügen Sie eine ID dafür hinzu. Fügen Sie dann in der Aktivität onCreate () diesen Code ein:
quelle