domingo, 16 de marzo de 2014

Repasando los Views y la visibilidad

El atributo de visibilidad siempre he pensado que puede dar mucho juego a la hora de crear una aplicación y vamos a demostrarlo con un pequeño ejemplo.
Imaginemos que tenemos que crear un formulario en el que pedimos el nombre del usuario y la forma en que nos ponemos en contacto con él, dando la posibilidad de que indique que no desea que lo hagamos.

Los datos relativos al contacto sólo aparecerán en pantalla si el usuario lo desea indicandolo con un RadioButton.
El esquema de la vista quedaría como sigue:

En el Layout1 pedimos el nombre del usuario y un RadioButton en el que solicitamos la forma de contacto, dando como opciones email,  teléfono y no deseado, marcando por defecto esta última. En Layout2 (invisible por defecto) pediremos la direccion de e-mail. En Layout3 (también invisible) el número de teléfono. Y por último en el Layout4 mostraremos un botón para confirmar el formulario.
Nuestro fichero XML quedaría de la siguiente forma:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LayoutPadre"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:visibility="visible"
    >
      <LinearLayout
          android:id="@+id/Layout1"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:visibility="visible"
          android:gravity="center_horizontal"
          >
            <TextView 
                android:id="@+id/Ly1Tv1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:text="@string/Ly1Tv1"
                android:textSize="20dip"
                android:textStyle="bold"
                />
            <EditText 
                android:id="@+id/Ly1Et1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:hint="@string/Ly1Et1"
                />
            <TextView
               android:id="@+id/Ly1Tv2"
               android:text="@string/Ly1Tv2"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content">
          </TextView>   
            <RadioGroup
               android:id="@+id/Ly1Rgrup"
               android:orientation="horizontal"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               >
               <RadioButton android:id="@+id/radio1"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@string/Ly1Rb1"
               android:checked="false">
               </RadioButton>
               <RadioButton android:id="@+id/radio2"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@string/Ly1Rb2"
               android:checked="false">
               </RadioButton>
               <RadioButton android:id="@+id/radio3"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:text="@string/Ly1Rb3"
             android:checked="true">
               </RadioButton>   
            </RadioGroup>
      </LinearLayout>
      <LinearLayout
          android:id="@+id/Layout2"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:visibility="gone"
          android:gravity="center_horizontal"
          >
            <EditText 
                android:id="@+id/Ly2Et1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:hint="@string/Ly2Et1"
                />
      </LinearLayout>
      <LinearLayout
          android:id="@+id/Layout3"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:visibility="gone"
          android:gravity="center_horizontal"
          >
            <EditText 
                android:id="@+id/Ly3Et1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:hint="@string/Ly3Et1"
                />
      </LinearLayout>
      <LinearLayout
          android:id="@+id/Layout4"
          android:orientation="vertical"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:visibility="visible"
          android:gravity="center_horizontal"
          >
          <TextView android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:background="#aaaaaa"
               android:height="1dip">
          </TextView>   
            <Button
                android:id="@+id/Ly4Bt1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/Ly4Bt1"
                />
      </LinearLayout>
</LinearLayout>

El fichero strings:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Visibilidad</string>
    <string name="Ly1Tv1">Formulario</string>
    <string name="Ly1Et1">Nombre</string>
    <string name="Ly1Tv2">Contacto:</string>
    <string name="Ly1Rb1">Mail</string>
    <string name="Ly1Rb2">Teléfono</string>
    <string name="Ly1Rb3">Ninguno</string>
    <string name="Ly2Et1">Email</string>
    <string name="Ly3Et1">Numero Telefono</string>
    <string name="Ly4Bt1">Confirmar</string>
</resources>

Y por último nuestra aplicación:



01public class PruebaVisibilidadActivity extends Activity {
02    /** Called when the activity is first created. */
03  
04 @Override
05    public void onCreate(Bundle savedInstanceState) {
06        super.onCreate(savedInstanceState);
07        setContentView(R.layout.main);
08         
09        RadioGroup rGrup = (RadioGroup) findViewById (R.id.Ly1Rgrup);
10         
11        // Defino el listener para el RadioGroup
12        OnCheckedChangeListener listenerGrupo =
13            new OnCheckedChangeListener() {
14            public void onCheckedChanged(RadioGroup group,int id) {
15             RadioButton item1 = (RadioButton) findViewById (R.id.radio1);
16                RadioButton item2 = (RadioButton) findViewById (R.id.radio2);
17                RadioButton item3 = (RadioButton) findViewById (R.id.radio3);               
18             if (item1.getId() == id) {
19                 muestroLayout2();
20                }
21                if (item2.getId() == id) {
22                 muestroLayout3();
23                }
24                if (item3.getId() == id) {
25                 ocultoLayouts();
26                }               
27            }
28        };
29        // Asigno el listener al RadioGroup
30        rGrup.setOnCheckedChangeListener(listenerGrupo);
31    }
32 // Muestro el Layout 2
33 public void muestroLayout2 () {
34   
35  View Layout2 = findViewById (R.id.Layout2);
36  View Layout3 = findViewById (R.id.Layout3);
37   
38  // Hago invisible el Layout3 y visible el Layout2
39  Layout2.setVisibility(View.VISIBLE);
40  Layout3.setVisibility(View.GONE);
41 }
42  
43 // Muestro el Layout 3
44 public void muestroLayout3 () {
45   
46  View Layout2 = findViewById (R.id.Layout2);
47  View Layout3 = findViewById (R.id.Layout3);
48 
49  // Hago invisible el Layout2 y visible el Layout3
50  Layout2.setVisibility(View.GONE);
51  Layout3.setVisibility(View.VISIBLE);
52 }
53 // Oculto los Layouts 2 y 3
54 public void ocultoLayouts () {
55   
56  View Layout2 = findViewById (R.id.Layout2);
57  View Layout3 = findViewById (R.id.Layout3);
58 
59  // Hago invisible el Layout2 y el Layout3
60  Layout2.setVisibility(View.GONE);
61  Layout3.setVisibility(View.GONE);
62 }
63  
64}
El resultado:
Como veis no aparece ni rastro de los Layouts 2 y 3.

Al seleccionar 'Mail' aparece el Layout 2.

 
Si seleccionamos Teléfono se muestra el Layout 3 y desaparece el Layout2.

De esta forma tan sencilla hemos hecho de un formulario simple algo dinámico en el que podemos hacer que aparezcan o desaparezcan elementos con un simple toque en la pantalla.

No hay comentarios:

Publicar un comentario