No puedo obtener mis elementos, por ejemplo ListView
, para cambiar el tamaño correctamente.¿Cómo establecer el tamaño y el diseño en onSizeChanged?
Obtuve un ListActivity
para buscar, con un tablero de instrumentos, un cuadro de edición y una vista de lista. La idea es ocultar la barra de acciones mientras se muestra el teclado.
extendí LinearLayout
, a escuchar para ver los cambios de tamaño (como se recomienda here):
public class SizeChangingLinearLayout extends LinearLayout {
//...
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
{
View actionbar = mainView.findViewById(R.id.actionbar);
if (yNew > yOld)
actionbar.setVisibility(View.VISIBLE);
else if (yNew < yOld)
actionbar.setVisibility(View.GONE);
super.onSizeChanged(xNew, yNew, xOld, yOld);
}
}
El escondite/proyección de la barra de acción funciona como se esperaba, pero hay un hueco por debajo de la ListView
de la misma altura que la barra de acciones oculta Tan pronto como los gráficos cambian (por ejemplo, escribiendo en la caja de edición), el ListView
llena el espacio. Un comportamiento similar aparece al revés, cuando se oculta el teclado.
[Editar]
El mismo problema aparece también en el cambio de diseño de otros. El cambio de Visibility
de cosas en onSizeChanged
muestra directamente, pero cambiar los tamaños y los márgenes no se muestra hasta que otra acción del usuario redibuja esas vistas. La invalidación no funciona desde onSizeChanged
.
[/ editar]
he tratado de actualizar los gráficos por:
invalidate
-ing tanto la costumbre LinearLayout y laListView
(como recomendada here)notifyDataSetChanged
en el del adaptador de la listaforceLayout
... y más, sin éxito. ¿Por qué el ListView
no cambia de tamaño al principio? ¿Tengo que anular onLayout
en mi LinearLayout extendido? ¿Qué me he perdido?
No cualquier actualización funciona, lo he notado. "Tan pronto como los gráficos cambian", escribí. Pero, por ejemplo, una ventana emergente no hará que se muestren los cambios realizados. Supongo que los elementos correctos deben ser invalidados, pero no es así. – JOG
El problema también aparece para todos los cambios de diseño, por ejemplo, para cambiar los márgenes de EditText. Pero _agregar_ elementos de diseño, por ejemplo un botón a la derecha del cuadro, se muestra inmediatamente. – JOG