teclado studio samsung puedo programacion porque pantalla móviles fondo desarrollo curso como color celular cambiar automaticamente aplicaciones android view android-linearlayout

studio - El teclado del software cambia el tamaño de la imagen de fondo en Android



manual de programacion android pdf (11)

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 apretado. ¿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>


A través de android: windowSoftInputMode = "adjustPan", lo que da una mala experiencia de usuario porque a través de toda esa pantalla va por la parte superior (desplazarse hacia arriba) Entonces, el siguiente es uno de los mejores resultados.

Tengo el mismo problema pero después de eso, encontré respuestas impresionantes del @Gem

En Manifiesto

android:windowSoftInputMode="adjustResize|stateAlwaysHidden"

En xml

No establezca ningún fondo aquí y mantenga su vista en ScrollView

En Java

Necesitas configurar el fondo en la ventana:

getWindow().setBackgroundDrawableResource(R.drawable.bg_wood) ;

Gracias a @Gem.


Agregue esta línea en el archivo AndroidManifest.xml :

android:windowSoftInputMode=adjustUnspecified

consulte este enlace para obtener más información.


Aquí está la mejor solución para evitar ese tipo de problema.

Paso 1: Crea un estilo

<style name="ChatBackground" parent="AppBaseTheme"> <item name="android:windowBackground">@drawable/bg_chat</item> </style>

Paso 2: establece tu estilo de actividad en el archivo AndroidManifest

<activity android:name=".Chat" android:screenOrientation="portrait" android:theme="@style/ChatBackground" >


En caso de que alguien necesite un adjustResize comportamiento de adjustResize y no quiera que su ImageView sea ​​redimensionado aquí hay otra solución alternativa.

Simplemente coloque ImageView dentro de ScrollView => RelativeLayout con ScrollView.fillViewport = true .

<ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <FrameLayout android:layout_width="100dp" android:layout_height="100dp"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:src="@drawable/gift_checked" /> </FrameLayout> </RelativeLayout> </ScrollView>


Encontré el problema principal al trabajar en mi aplicación. Al principio, utilizo el método provisto por @parulb para resolver el problema. Agradézcale mucho Pero más tarde noté que la imagen de fondo está parcialmente oculta por la barra de acciones (y la barra de estado, estoy seguro). Este pequeño problema ya ha sido propuesto por @ zgc7009, quien comentó a continuación la respuesta de @parulb hace un año y medio, pero nadie contestó.

Trabajé todo un día para descubrir un camino y, afortunadamente, al menos ahora puedo resolver este problema perfectamente en mi teléfono celular.

Primero necesitamos un recurso de lista de capas en la carpeta dibujable para agregar relleno en la parte superior a la imagen de fondo:

<!-- my_background.xml --> <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="75dp"> <bitmap android:src="@drawable/bg" /> </item> </layer-list>

Segundo, configuramos este archivo como recurso para el fondo como se mencionó anteriormente:

getWindow().setBackgroundDrawableResource(R.drawable.my_background);

Estoy usando Nexus 5. Encontré una manera de obtener la altura de la barra de acciones en xml pero no en la barra de estado, así que tengo que usar una altura fija de 75dp para el relleno superior. Espero que cualquiera pueda encontrar la última pieza de este rompecabezas.


Enfrenté el mismo problema al desarrollar una aplicación de chat, una pantalla de chat con una imagen de fondo. android:windowSoftInputMode="adjustResize" exprimió mi imagen de fondo para que se ajustara al espacio disponible después de que se mostrara el teclado virtual y "adjustPan" cambió toda la distribución 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 un XML de actividad. Use getWindow().setBackgroundDrawable() en su actividad.


Me enfrenté al mismo problema y ninguna solución me satisfizo porque utilicé el fragmento como una capa sobre otro fragmento, por lo que getActivity().getWindow().setBackgroundDrawable() no me funcionó. Mi solución fue anular FrameLayout con lógica para manejar el teclado que aparece y cambiar el mapa de bits sobre la marcha. Ese es mi FrameLayout (kotlin):

`clase FlexibleFrameLayout: FrameLayout {

var backgroundImage: Drawable? = null set(bitmap) { field = bitmap invalidate() } private var keyboardHeight: Int = 0 private var isKbOpen = false private var actualHeight = 0 constructor(context: Context) : super(context) { init() } constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet) { init() } fun init() { setWillNotDraw(false) } override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { super.onMeasure(widthMeasureSpec, heightMeasureSpec) val height = MeasureSpec.getSize(heightMeasureSpec) if (actualHeight == 0) { actualHeight = height return } //kb detected if (actualHeight - height > 100 && keyboardHeight == 0) { keyboardHeight = actualHeight - height isKbOpen = true } if (actualHeight - height < 50 && keyboardHeight != 0) { isKbOpen = false } if (height != actualHeight) { invalidate() } } override fun onDraw(canvas: Canvas) { if (backgroundImage != null) { if (backgroundImage is ColorDrawable) { backgroundImage!!.setBounds(0, 0, measuredWidth, measuredHeight) backgroundImage!!.draw(canvas) } else if (backgroundImage is BitmapDrawable) { val scale = measuredWidth.toFloat() / backgroundImage!!.intrinsicWidth.toFloat() val width = Math.ceil((backgroundImage!!.intrinsicWidth * scale).toDouble()).toInt() val height = Math.ceil((backgroundImage!!.intrinsicHeight * scale).toDouble()).toInt() val kb = if (isKbOpen) keyboardHeight else 0 backgroundImage!!.setBounds(0, 0, width, height) backgroundImage!!.draw(canvas) } } else { super.onDraw(canvas) } }

} `

Luego lo usé como un FrameLayout habitual y en mi fragmento llamado frameLayout.backgroundImage = Drawable.createFromPath(path)

Espero eso ayude


Ok lo arreglé usando

android:windowSoftInputMode="stateVisible|adjustPan"

entrada dentro de la etiqueta <Activity > en el archivo de manifest . Creo que fue causado por tener ScrollView dentro de la Actividad.


Solo agrega tu actividad

getWindow().setBackgroundDrawable(R.drawable.your_image_name);


Sufrí problemas similares, pero parece que usar adjustPan con android:isScrollContainer="false" todavía no solucionó mi diseño (que era un RecyclerView debajo de LinearLayout). The RecyclerView estaba bien, pero cada vez que aparecía el teclado virtual, el LinearLayout se reajustaba.

Para evitar este comportamiento (simplemente quería que el teclado revisara mi diseño), fui con el siguiente código:

<activity android:name=".librarycartridge.MyLibraryActivity" android:windowSoftInputMode="adjustNothing" />

Esto le dice a Android que básicamente deje su diseño solo cuando se llame al teclado virtual.

Se puede encontrar más información sobre posibles opciones here (aunque, curiosamente, no parece que haya una entrada para adjustNothing ).


solo para agregar ...

Si tiene una lista de su actividad, debe agregar este android:isScrollContainer="false" en las propiedades de su lista de listas ...

y no te olvides de agregar android:windowSoftInputMode="adjustPan" en tu manifiesto xml en tu actividad ...

si usas android:windowSoftInputMode="adjustUnspecified" con vista desplazable en tu diseño, tu fondo aún se redimensionará con el teclado android:windowSoftInputMode="adjustUnspecified" ...

Sería mejor si usa el valor de "adjustPan" para evitar que su fondo cambie de tamaño ...