android - responsabilidades - Efecto de establecer la visibilidad de vista de padres en sus hijos
responsabilidades paternas (3)
Esta pregunta surge de tener que mostrar / ocultar diferentes vistas dinámicamente. Las vistas tienen 3 configuraciones de visibilidad: visible, invisible y desaparecida. Si tiene una vista principal, por ejemplo, un LinearLayout
, que tiene varias vistas secundarias (no importa lo que sean), ¿está configurando la visibilidad de los padres igual que la visibilidad de todos los elementos secundarios de forma independiente? Por ejemplo si digo
LinearLayout container = (LinearLayout) findViewById(R.id.layout_1);
container.setVisiblity(View.GONE);
¿Es lo mismo que encontrar la vista de cada niño individual y establecer todas esas visibilidades en View.GONE
? ¿Qué pasa si el padre no era View.GONE
sino View.INVISIBLE
? ¿Están todos los niños aún dibujados pero simplemente no vistos?
El efecto es el mismo, pero en realidad no establece la visibilidad de todos los niños. Simplemente no los dibujará.
Por ejemplo:
Establezca child en GONE (el padre es visible, el niño se ha ido)
Establecer padre en GONE (ambos desaparecidos)
Establezca padre en VISIBLE (padre visible, hijo aún desaparecido, ya que el niño se estableció explícitamente antes)
Establecer niño en VISIBLE (ambos visibles)
Cada vez que una vista es INVISIBLE, no la dibujará ni a sus hijos. Si se va, tampoco reservará ningún espacio de diseño para ellos. Sin embargo, si verifica la getVisibility()
del niño getVisibility()
, verá que todavía está configurado como lo que era antes, incluso si no se está dibujando.
Sí, tienes razón en todos los puntos :)
Al establecer la visibilidad de los diseños en GONE se ocultarán todos los elementos secundarios. Establecer la visibilidad de los diseños en INVISIBLE hará que todos los niños sean invisibles, pero que aún estén dibujados y ocupen espacio.
Use la siguiente función recursiva para hacer que su hijo vea o se vaya .
El primer argumento es su vista principal y el segundo argumento decide si desea que los elementos secundarios de la vista principal se vean o se hayan ido. true = visible false = ido
private void layoutElemanlarininGorunumunuDegistir(View view, boolean gorunur_mu_olsun) {
ViewGroup view_group;
try {
view_group = (ViewGroup) view;
Sabitler.konsolaYazdir(TAG, "View ViewGroup imiş!" + view.getId());
} catch (ClassCastException e) {
Sabitler.konsolaYazdir(TAG, "View ViewGroup değilmiş!" + view.getId());
return;
}
int view_eleman_sayisi = view_group.getChildCount();
for (int i = 0; i < view_eleman_sayisi; i++) {
View view_group_eleman = view_group.getChildAt(i);
if (gorunur_mu_olsun) {
view_group_eleman.setVisibility(View.VISIBLE);
} else {
view_group_eleman.setVisibility(View.GONE);
}
layoutElemanlarininGorunumunuDegistir(view_group_eleman, gorunur_mu_olsun);
}
}