Cada vez que aparece el teclado del software, cambia el tamaño de la imagen de fondo. Consulte la captura de pantalla a continuación:
Como puede ver, el fondo está algo comprimido. ¿Alguien puede arrojar luz sobre por qué el fondo cambia de tamaño?
Mi diseño es el siguiente:
<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
fuente
fuente
Enfrenté el mismo problema al desarrollar una aplicación de chat, pantalla de chat con una imagen de fondo.
android:windowSoftInputMode="adjustResize"
apreté mi imagen de fondo para que se ajustara al espacio disponible después de que se visualizara el teclado virtual y "ajustarPan" cambiara todo el diseño para ajustar el teclado virtual. La solución a este problema fue establecer el fondo de la ventana en lugar de un fondo de diseño dentro de una actividad XML. UtilizargetWindow().setBackgroundDrawable()
en su actividad.fuente
Aquí está la mejor solución para evitar este tipo de problema.
Paso 1: crea un estilo
Paso 2: establece tu estilo de actividad en el
AndroidManifest
archivofuente
A través de Android: windowSoftInputMode = "ajustarPan" que da una mala experiencia de usuario porque a través de toda la pantalla se pone en la parte superior (cambio a la parte superior) Entonces, la siguiente es una de las mejores respuestas.
Tengo el mismo problema, pero después de eso, encontré respuestas impresionantes de @Gem
En manifiesto
En xml
No establezca ningún fondo aquí y mantenga su vista en ScrollView
En java
Debe configurar el fondo en la ventana:
Gracias a @Gem.
fuente
solo por agregar ...
si tiene una vista de lista en su actividad, necesita agregarla
android:isScrollContainer="false"
en sus propiedades de vista de lista ...y no olvides agregar
android:windowSoftInputMode="adjustPan"
tu manifiesto xml en tu actividad ...si ustedes usan una
android:windowSoftInputMode="adjustUnspecified"
vista desplazable en su diseño, entonces su fondo aún cambiará de tamaño con el teclado virtual ...sería mejor si utiliza el valor "ajustarPan" para evitar que el fondo cambie de tamaño ...
fuente
En caso de que alguien necesite un
adjustResize
comportamiento y no quieraImageView
que se cambie su tamaño aquí, hay otra solución.Simplemente ponga
ImageView
adentroScrollView
=>RelativeLayout
conScrollView.fillViewport = true
.fuente
Encontré el problema principal cuando trabajaba en mi aplicación. Al principio, uso el método proporcionado por @parulb para resolver el problema. Muchas gracias Pero luego noté que la imagen de fondo está parcialmente oculta por la barra de acción (y la barra de estado, estoy seguro). Este pequeño problema ya lo propuso @ zgc7009, quien comentó a continuación la respuesta de @parulb hace un año y medio, pero nadie respondió.
Trabajé todo un día para encontrar una manera y, afortunadamente, al menos ahora puedo resolver este problema perfectamente en mi teléfono celular.
Primero necesitamos un recurso de lista de capas en una carpeta dibujable para agregar relleno en la parte superior de la imagen de fondo:
En segundo lugar, configuramos este archivo como recurso para el fondo como se mencionó anteriormente:
Estoy usando Nexus 5. Encontré una manera de obtener la altura de la barra de acción en xml pero no la barra de estado, por lo que tengo que usar una altura fija de 75dp para el relleno superior. Espero que alguien pueda encontrar la última pieza de este rompecabezas.
fuente
Sufrí problemas similares, pero parece que usar
adjustPan
conandroid:isScrollContainer="false"
todavía no solucionó mi diseño (que era un RecyclerView debajo de LinearLayout). RecyclerView estaba bien, pero cada vez que aparecía el teclado virtual, LinearLayout se reajustaba.Para evitar este comportamiento (simplemente quería que el teclado revisara mi diseño), utilicé el siguiente código:
Esto le dice a Android que básicamente deje su diseño solo cuando se llama al teclado virtual.
Puede encontrar más información sobre las posibles opciones aquí (aunque, por extraño que parezca, no parece que haya una entrada para
adjustNothing
).fuente
Después de estudiar e implementar todas las respuestas disponibles, aquí estoy agregando una solución.
Esta respuesta es una combinación de código de:
https://stackoverflow.com/a/45620231/1164529
https://stackoverflow.com/a/27702210/1164529
Aquí está la
AppCompatImageView
clase personalizada que no mostró el teclado suave wrt de estiramiento o desplazamiento: -Para usarlo como fondo para mi
Fragment
clase, lo configuré como primer elemento paraFrameLayout
.fuente
Agregue esta línea en el archivo AndroidManifest.xml :
consulte este enlace para más información.
fuente
Solo use en su
onCreate()
este código:y elimine esta línea en su xml:
Lee mas en:
http://developer.android.com/reference/android/view/Window.html
gracias por: Adrian Cid Almaguer
fuente
Me enfrenté a este problema, cuando mi imagen de fondo era solo un
ImageView
interiorFragment
, y el teclado la redimensionó.Mi solución fue: usar personalizado
ImageView
de esta respuesta SO , editado para ser compatible conandroidx
.fuente
Solo agrega tu actividad
fuente
Me enfrenté a este mismo problema antes, pero ninguna solución me funcionó tanto tiempo porque estaba usando un
Fragment
, y tambiéngetActivity().getWindow().setBackgroundDrawable()
era una solución para mí.La solución que funcionó para mí es anular
FrameLayout
con una lógica para manejar el teclado que debería aparecer y cambiar el mapa de bits sobre la marcha.Aquí está mi código FrameLayout (Kotlin):
Y lo usé como el fondo habitual de FrameLayout.
frameLayout.backgroundImage = Drawable.createFromPath(path)
Espero eso ayude.
fuente
Puede ajustar LinearLayout con FrameLayout y agregar ImageView con fondo:
Y puede establecer su altura cuando crea actividad / fragmento (para evitar que se escale al abrir el teclado). Algún código en Kotlin de Fragment:
fuente
si está configurada la imagen como fondo de ventana y ui va a atascarse. entonces puede existir la posibilidad de que use drawable que se encuentra en una sola carpeta dibujable, en caso afirmativo, debe pegarlo en drawable-nodpi o drawable-xxxhdpi.
fuente
Mi solución es sustituir el fondo de la ventana con el del diseño, luego establecer el fondo del diseño en nulo. De esta manera mantengo la imagen en la ventana de vista previa XML:
Así que mantenga el fondo en el diseño y agregue una identificación para ello. Luego, en la actividad onCreate () pon este código:
fuente