Diferencia entre revisiones de «Spinner»

De MediaWiki
Ir a la navegación Ir a la búsqueda
(Página creada con «==Introdución== *Un '''Spinner''' é unha lista despregable de opcións na que o usuario pode escoller unha delas. Image:00_spinners_form.png *Imos comezar usando o...»)
 
Línea 16: Línea 16:
  
 
==Caso práctico==
 
==Caso práctico==
−
*Crear o proxecto '''U2_12_Spinner'''
+
 
 +
* Partimos que xa temos creado o proxecto inicial como [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Creando_proxecto_base xa indicamos anteriormente].
 +
: Se non o temos creado antes, crea un paquete de nome '''UI''' como un subpaquete do teu paquete principal.
 +
: Dentro do paquete UI, crearemos un novo paquete de nome: '''Spinners'''.
 +
 
 +
 
 +
<br />
 +
* Dentro do paquete '''Spinners''' crear unha nova 'Empty Activity' de nome: '''UD02_01_Spinners''' de tipo Launcher e sen compatibilidade.
 +
: Modifica o arquivo '''AndroidManifiest.xml''' e engade unha label á activity como [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Creando_proxecto_base xa vimos na creación do proxecto base].
 +
 
 +
 +
<br />
 
*Nunha primeira versión imos crear unha aplicación que permita seleccionar un planeta nun Spiner e logo premendo un botón nos indicará o ítem seleccionado e a súa posición.
 
*Nunha primeira versión imos crear unha aplicación que permita seleccionar un planeta nun Spiner e logo premendo un botón nos indicará o ítem seleccionado e a súa posición.
  
  
 
<gallery caption="Spinner Planetas" widths="350" heights="300px" perrow="2">
 
<gallery caption="Spinner Planetas" widths="350" heights="300px" perrow="2">
−
Image:Android_2013_U2_12_Spinner_11.jpg| Aplicación recén iniciada.
+
Image:PDM_spinner_7.jpg| Aplicación recén iniciada.
−
Image:Android_2013_U2_12_Spinner_12.jpg| Seleccionar Xúpiter (5º elemento da lista)
+
Image:PDM_spinner_8.jpg| Seleccionar Xúpiter (5º elemento da lista)e prememos o botón
−
Image:Android_2013_U2_12_Spinner_13.jpg| Premer o botón
+
Image:PDM_spinner_9.jpg| Indícanos que seleccionamos Xúpiter e que está na posición 4. O índice do Spinner comeza en 0.
−
Image:Android_2013_U2_12_Spinner_14.jpg| Indícanos que seleccionamos Xúpiter e que está na posición 4. O índice do Spinner comeza en 0.
 
 
</gallery>
 
</gallery>
  
 +
 +
 +
<br />
 
===Arquivo de recursos: String-Array===
 
===Arquivo de recursos: String-Array===
 
<gallery caption="Crear array" widths="350" heights="300px" perrow="2">
 
<gallery caption="Crear array" widths="350" heights="300px" perrow="2">
−
Image:Android_2013_U2_12_Spinner_01.jpg| En '''/res/values''' crear un novo ficheiro XML de Android.  
+
Image:PDM_spinner_1.jpg| En '''/res/values''' crear un novo ficheiro XML de Android.  
−
Image:Android_2013_U2_12_Spinner_02.jpg| Indicar o nome, nesta caso: array_planetas e rematar.
+
Image:PDM_spinner_2.jpg| Indicar o nome, nesta caso: array_planetas_ud02_01_spinner e rematar.
−
Image:Android_2013_U2_12_Spinner_03.jpg| Engadir un elemento ...
+
Image:PDM_spinner_3.jpg| Definimos o array coa etiqueta <string-array> e indicamos o nome que terá.  
−
Image:Android_2013_U2_12_Spinner_04.jpg| ... tipo String_Array
+
Image:PDM_spinner_4.jpg| Podemos ver que tipo de etiquetas podemos ter nun arquivo de tipo 'values' premendo o botón dereito do rato e escollendo a o opción '''Generate'''.
−
Image:Android_2013_U2_12_Spinner_05.jpg| Poñerlle un nome ao recurso: planetas
+
Image:PDM_spinner_5.jpg| Escolleremos a opción '''XML Tag'''.
−
Image:Android_2013_U2_12_Spinner_06.jpg| Engadir un ...
+
Image:PDM_spinner_6.jpg| Da lista escolleremos a etiqueta que queiramos.
−
Image:Android_2013_U2_12_Spinner_07.jpg| ... ítem
 
−
Image:Android_2013_U2_12_Spinner_08.jpg| Indicar un valor para ese ítem: Mercurio
 
−
Image:Android_2013_U2_12_Spinner_09.jpg| Ficheiro en formaro XML, onde xa se pode copiar/pegar/modificar e crear o resto dos items. 
 
−
Image:Android_2013_U2_12_Spinner_10.jpg| 
 
 
</gallery>
 
</gallery>
  
Línea 47: Línea 56:
 
<?xml version="1.0" encoding="utf-8"?>
 
<?xml version="1.0" encoding="utf-8"?>
 
<resources>
 
<resources>
−
    <string-array name="planetas">
+
    <string-array name="planetas_UD02_01_spinner">
 
         <item>Mercurio</item>
 
         <item>Mercurio</item>
 
         <item>Venus</item>
 
         <item>Venus</item>
Línea 62: Línea 71:
  
  
 +
<br />
 
===XML do Layout===
 
===XML do Layout===
  
 
*Observar como se crea un Spinner
 
*Observar como se crea un Spinner
−
<syntaxhighlight lang="xml" line highlight="7-11,17">
+
<syntaxhighlight lang="xml" line highlight="8-12,18">
 +
<?xml version="1.0" encoding="utf-8"?>
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 
     xmlns:tools="http://schemas.android.com/tools"
 
     xmlns:tools="http://schemas.android.com/tools"
Línea 73: Línea 84:
  
 
     <Spinner
 
     <Spinner
−
         android:id="@+id/spin_planetas"
+
         android:id="@+id/spnPlanetas_UD02_01_spinners"
 
         android:layout_width="wrap_content"
 
         android:layout_width="wrap_content"
 
         android:layout_height="wrap_content"
 
         android:layout_height="wrap_content"
−
         android:entries="@array/planetas" />
+
         android:entries="@array/planetas_UD02_01_spinner" />
  
 
     <Button
 
     <Button
Línea 86: Línea 97:
  
 
     <TextView
 
     <TextView
−
         android:id="@+id/lbl_resultado"
+
         android:id="@+id/txtResultado_UD02_01_spinners"
 
         android:layout_width="wrap_content"
 
         android:layout_width="wrap_content"
 
         android:layout_height="wrap_content"
 
         android:layout_height="wrap_content"
Línea 93: Línea 104:
 
</LinearLayout>
 
</LinearLayout>
 
</syntaxhighlight>
 
</syntaxhighlight>
−
*'''Liña 11''': é onde se vincula o Spinner co recurso tipo array: planetas.
+
*'''Liña 12''': é onde se vincula o Spinner co recurso tipo array: planetas.
−
*'''Liña 17''': chamamos a un método cando se faga Click.
+
*'''Liña 18''': chamamos a un método cando se faga Click.
  
  
  
 +
<br />
 
===Código Java===
 
===Código Java===
−
<syntaxhighlight lang="java" line highlight="25-32">
+
<syntaxhighlight lang="java" line highlight="15-22">
−
package com.example.u2_12_spinner;
+
package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.Spinners;
  
 
import android.app.Activity;
 
import android.app.Activity;
 
import android.os.Bundle;
 
import android.os.Bundle;
−
import android.view.Menu;
 
 
import android.view.View;
 
import android.view.View;
 +
import android.widget.AdapterView;
 
import android.widget.Spinner;
 
import android.widget.Spinner;
 
import android.widget.TextView;
 
import android.widget.TextView;
  
−
public class U2_12_Spinner extends Activity {
+
import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
  
−
@Override
+
public class UD02_01_Spinners extends Activity {
−
protected void onCreate(Bundle savedInstanceState) {
 
−
super.onCreate(savedInstanceState);
 
−
setContentView(R.layout.activity_u2_12__spinner);
 
−
}
 
  
−
@Override
 
−
public boolean onCreateOptionsMenu(Menu menu) {
 
−
// Inflate the menu; this adds items to the action bar if it is present.
 
−
getMenuInflater().inflate(R.menu.u2_12__spinner, menu);
 
−
return true;
 
−
}
 
  
−
public void onButtonClick(View v) {
+
    public void onButtonClick(View v) {
−
Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
+
        Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_spinners);
−
TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);
+
        TextView txtResultado = (TextView) findViewById(R.id.txtResultado_UD02_01_spinners);
  
−
lblResultado.setText("Seleccionaches "
+
        txtResultado.setText("Seleccionaches "
−
+ spinPlanetas.getSelectedItem()  
+
                + spinPlanetas.getSelectedItem()
−
+ "\nque está na posición " + spinPlanetas.getSelectedItemId());
+
                + "\nque está na posición " + spinPlanetas.getSelectedItemId());
−
}
+
    }
  
 +
 +
    @Override
 +
    protected void onCreate(Bundle savedInstanceState) {
 +
        super.onCreate(savedInstanceState);
 +
        setContentView(R.layout.activity_ud02_01__spinners);
 +
 +
    }
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
−
*'''Liñas 26,27''': Definimos os obxectos nos que recollemos os controis declarados no Layout.
+
:* Liñas 16,17: Definimos os obxectos nos que recollemos os controis declarados no Layout.
−
*'''Liñas 31,32''': seleccionamos o elemento da lista e a súa posición.
+
:* Liñas 20,21: Seleccionamos o elemento da lista e a súa posición.
 +
 
  
 +
 +
<br />
 
===Capturar o evento cando se selecciona un ítem===
 
===Capturar o evento cando se selecciona un ítem===
 +
 
*Nesta segunda versión vaise deixar que o botón siga realizando a súa función, pero agora cando seleccionemos un ítem que se capture o evento e que na etiqueta indicar cal é o planeta seleccionado e a súa posición.
 
*Nesta segunda versión vaise deixar que o botón siga realizando a súa función, pero agora cando seleccionemos un ítem que se capture o evento e que na etiqueta indicar cal é o planeta seleccionado e a súa posición.
  
−
<syntaxhighlight lang="java" line enclose="div" highlight="19-42" >
+
<syntaxhighlight lang="java" line highlight="27-50,58">
−
package com.example.u2_12_spinner;
+
package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.Spinners;
  
 
import android.app.Activity;
 
import android.app.Activity;
 
import android.os.Bundle;
 
import android.os.Bundle;
−
import android.view.Menu;
 
 
import android.view.View;
 
import android.view.View;
 
import android.widget.AdapterView;
 
import android.widget.AdapterView;
−
import android.widget.AdapterView.OnItemSelectedListener;
 
 
import android.widget.Spinner;
 
import android.widget.Spinner;
 
import android.widget.TextView;
 
import android.widget.TextView;
  
−
public class U2_12_Spinner extends Activity {
+
import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
  
−
@Override
+
public class UD02_01_Spinners extends Activity {
−
protected void onCreate(Bundle savedInstanceState) {
 
−
super.onCreate(savedInstanceState);
 
−
setContentView(R.layout.activity_u2_12__spinner);
 
  
−
Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
 
  
−
spinPlanetas.setOnItemSelectedListener(new OnItemSelectedListener() {
+
    public void onButtonClick(View v) {
 +
        Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_spinners);
 +
        TextView txtResultado = (TextView) findViewById(R.id.txtResultado_UD02_01_spinners);
  
−
@Override
+
        txtResultado.setText("Seleccionaches "
−
public void onItemSelected(AdapterView<?> parent, View view,
+
                + spinPlanetas.getSelectedItem()
−
int pos, long id) {
+
                + "\nque está na posición " + spinPlanetas.getSelectedItemId());
−
// TODO Auto-generated method stub
+
    }
  
−
TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);
+
    /**
 +
    * Neste método asociamos os listener aos view onde queramos xestionar eventos
 +
    */
 +
    private void xestionarEventos(){
  
−
lblResultado.setText("Seleccionaches "
+
        Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_spinners);
−
+ parent.getItemAtPosition(pos)
+
        spinPlanetas.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
−
+ "\nque está na posición " + pos);
 
  
−
}
+
            @Override
 +
            public void onItemSelected(AdapterView<?> parent, View view,
 +
                                      int pos, long id) {
 +
                // TODO Auto-generated method stub
  
−
@Override
+
                TextView txtResultado = (TextView) findViewById(R.id.txtResultado_UD02_01_spinners);
−
public void onNothingSelected(AdapterView<?> arg0) {
 
−
// TODO Auto-generated method stub
 
  
−
}
+
                txtResultado.setText("Seleccionaches "
−
});
+
                        + parent.getItemAtPosition(pos)
−
}
+
                        + "\nque está na posición " + pos);
  
−
@Override
+
            }
−
public boolean onCreateOptionsMenu(Menu menu) {
 
−
// Inflate the menu; this adds items to the action bar if it is present.
 
−
getMenuInflater().inflate(R.menu.u2_12__spinner, menu);
 
−
return true;
 
−
}
 
  
−
public void onButtonClick(View v) {
+
            @Override
−
Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);
+
            public void onNothingSelected(AdapterView<?> arg0) {
−
TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);
+
                // TODO Auto-generated method stub
  
−
lblResultado.setText("Seleccionaches " + spinPlanetas.getSelectedItem()
+
            }
−
+ "\nque está na posición " + spinPlanetas.getSelectedItemId());
+
        });
−
}
+
    }
  
 +
    @Override
 +
    protected void onCreate(Bundle savedInstanceState) {
 +
        super.onCreate(savedInstanceState);
 +
        setContentView(R.layout.activity_ud02_01__spinners);
 +
 +
        xestionarEventos();
 +
    }
 
}
 
}
−
 
 
</syntaxhighlight>
 
</syntaxhighlight>
−
*'''Liña 21''': Listener que se chama cando se selecciona un elemento do Spinner
+
*'''Liña 27''': Listener que se chama cando se selecciona un elemento do Spinner
−
*'''Liña 24''': O métod onItemSelected(AdapterView<?> parent, View view, int pos, long id) é chamado cando se selecciona un item distinto do xa seleccionado.
+
*'''Liña 33''': O métod onItemSelected(AdapterView<?> parent, View view, int pos, long id) é chamado cando se selecciona un item distinto do xa seleccionado.
 
*Parámetros:
 
*Parámetros:
 
**parent: O elemento (AdapterView) onde se fixo a selección.
 
**parent: O elemento (AdapterView) onde se fixo a selección.

Revisión del 09:37 7 oct 2018

Introdución

  • Un Spinner é unha lista despregable de opcións na que o usuario pode escoller unha delas.

00 spinners form.png


  • Imos comezar usando o Spinner apoiándonos primeiro nun botón de texto.


  • Unha forma estática de definir os datos que van encher o Spinner é usando un arquivo de recursos de tipo String-array:


Caso práctico

Se non o temos creado antes, crea un paquete de nome UI como un subpaquete do teu paquete principal.
Dentro do paquete UI, crearemos un novo paquete de nome: Spinners.



  • Dentro do paquete Spinners crear unha nova 'Empty Activity' de nome: UD02_01_Spinners de tipo Launcher e sen compatibilidade.
Modifica o arquivo AndroidManifiest.xml e engade unha label á activity como xa vimos na creación do proxecto base.



  • Nunha primeira versión imos crear unha aplicación que permita seleccionar un planeta nun Spiner e logo premendo un botón nos indicará o ítem seleccionado e a súa posición.




Arquivo de recursos: String-Array


  • Ficheiro de recursos: array_planetas.xml.
  • Polo nome do string_array é por onde se vai acceder ao array.
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3     <string-array name="planetas_UD02_01_spinner">
 4         <item>Mercurio</item>
 5         <item>Venus</item>
 6         <item>Terra</item>
 7         <item>Marte</item>
 8         <item>Xúpiter</item>
 9         <item>Saturno</item>
10         <item>Urano</item>
11         <item>Neptuno</item>
12     </string-array>
13 </resources>



XML do Layout

  • Observar como se crea un Spinner
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical" >
 7 
 8     <Spinner
 9         android:id="@+id/spnPlanetas_UD02_01_spinners"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:entries="@array/planetas_UD02_01_spinner" />
13 
14     <Button
15         android:id="@+id/btn_seleccion"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:onClick="onButtonClick"
19         android:text="Preme cando selecciones" />
20 
21     <TextView
22         android:id="@+id/txtResultado_UD02_01_spinners"
23         android:layout_width="wrap_content"
24         android:layout_height="wrap_content"
25         android:text="Selecciona un planeta" />
26 
27 </LinearLayout>
  • Liña 12: é onde se vincula o Spinner co recurso tipo array: planetas.
  • Liña 18: chamamos a un método cando se faga Click.



Código Java

 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.Spinners;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.AdapterView;
 7 import android.widget.Spinner;
 8 import android.widget.TextView;
 9 
10 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
11 
12 public class UD02_01_Spinners extends Activity {
13 
14 
15     public void onButtonClick(View v) {
16         Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_spinners);
17         TextView txtResultado = (TextView) findViewById(R.id.txtResultado_UD02_01_spinners);
18 
19         txtResultado.setText("Seleccionaches "
20                 + spinPlanetas.getSelectedItem()
21                 + "\nque está na posición " + spinPlanetas.getSelectedItemId());
22     }
23 
24 
25     @Override
26     protected void onCreate(Bundle savedInstanceState) {
27         super.onCreate(savedInstanceState);
28         setContentView(R.layout.activity_ud02_01__spinners);
29 
30     }
31 }
  • Liñas 16,17: Definimos os obxectos nos que recollemos os controis declarados no Layout.
  • Liñas 20,21: Seleccionamos o elemento da lista e a súa posición.



Capturar o evento cando se selecciona un ítem

  • Nesta segunda versión vaise deixar que o botón siga realizando a súa función, pero agora cando seleccionemos un ítem que se capture o evento e que na etiqueta indicar cal é o planeta seleccionado e a súa posición.
 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.Spinners;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.AdapterView;
 7 import android.widget.Spinner;
 8 import android.widget.TextView;
 9 
10 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
11 
12 public class UD02_01_Spinners extends Activity {
13 
14 
15     public void onButtonClick(View v) {
16         Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_spinners);
17         TextView txtResultado = (TextView) findViewById(R.id.txtResultado_UD02_01_spinners);
18 
19         txtResultado.setText("Seleccionaches "
20                 + spinPlanetas.getSelectedItem()
21                 + "\nque está na posición " + spinPlanetas.getSelectedItemId());
22     }
23 
24     /**
25      * Neste método asociamos os listener aos view onde queramos xestionar eventos
26      */
27     private void xestionarEventos(){
28 
29         Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_spinners);
30         spinPlanetas.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
31 
32             @Override
33             public void onItemSelected(AdapterView<?> parent, View view,
34                                        int pos, long id) {
35                 // TODO Auto-generated method stub
36 
37                 TextView txtResultado = (TextView) findViewById(R.id.txtResultado_UD02_01_spinners);
38 
39                 txtResultado.setText("Seleccionaches "
40                         + parent.getItemAtPosition(pos)
41                         + "\nque está na posición " + pos);
42 
43             }
44 
45             @Override
46             public void onNothingSelected(AdapterView<?> arg0) {
47                 // TODO Auto-generated method stub
48 
49             }
50         });
51     }
52 
53     @Override
54     protected void onCreate(Bundle savedInstanceState) {
55         super.onCreate(savedInstanceState);
56         setContentView(R.layout.activity_ud02_01__spinners);
57 
58         xestionarEventos();
59     }
60 }
  • Liña 27: Listener que se chama cando se selecciona un elemento do Spinner
  • Liña 33: O métod onItemSelected(AdapterView<?> parent, View view, int pos, long id) é chamado cando se selecciona un item distinto do xa seleccionado.
  • Parámetros:
    • parent: O elemento (AdapterView) onde se fixo a selección.
    • view: A vista que foi selecionada dentro do AdapterView
    • position: A posición da vista dentro do Adaptador.
    • id: Cada ítem pode ter varias filas (neste caso só ten unha) este campo indicaría a fila dentro do ítem





-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).