¿Cómo establecer el tamaño y el diseño en onSizeChanged?
No puedo obtener mis elementos, por ejemploListView
, para cambiar el tamaño correctamente.
Recibí unaListActivity
para buscar, con un tablero, un cuadro de edición y una vista de lista. La idea es ocultar la barra de acción mientras se muestra el teclado.
ExtendíLinearLayout
, para escuchar los cambios en el tamaño de la vista (como se recomiendaaqu):
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);
}
}
La ocultación / visualización de la barra de acción funciona como se esperaba, pero hay un espacio debajo de laListView
de la misma altura que la barra de acción oculta. Tan pronto como cambie un gráfico (por ejemplo, escribir en el cuadro de edición), laListView
llena el vacío. Un comportamiento similar aparece a la inversa, al ocultar el teclado.
[Editar
El mismo problema también aparece al cambiar otro diseño. CambiandoVisibility
de cosas enonSizeChanged
se muestra directamente, pero el cambio de tamaños y márgenes no se muestra hasta que alguna otra acción del usuario vuelve a dibujar esas vistas. La invalidación no funciona desdeonSizeChanged
.
[/Editar
He intentado actualizar los gráficos:
invalidate
-ing tanto el LinearLayout personalizado como elListView
(como se recomiendaaqu)notifyDataSetChanged
en el adaptador de la listaforceLayout
... y más, sin éxito. Porque es elListView
no cambiar el tamaño al principio? ¿Tengo que anularonLayout
en mi LinearLayout extendido? ¿Qué me he perdido?