https://manuais.iessanclemente.net/index.php?title=Spinner&feed=atom&action=historySpinner - Historial de revisiones2024-03-28T11:24:11ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Spinner&diff=57130&oldid=prevAngelfg en 08:08 28 jul 20152015-07-28T08:08:55Z<p></p>
<p><b>Página nueva</b></p><div>==Introdución==<br />
*Un '''Spinner''' é unha lista despregable de opcións na que o usuario pode escoller unha delas.<br />
[[Image:00_spinners_form.png]]<br />
<br />
<br />
*Imos comezar usando o Spinner apoiándonos primeiro nun botón de texto.<br />
<br />
<br />
*Unha forma estática de definir os datos que van encher o Spinner é usando un arquivo de recursos de tipo '''String-array''':<br />
<br />
<br />
*'''Referencias'''<br />
**O control: http://developer.android.com/reference/android/widget/Spinner.html<br />
**Introdución: http://developer.android.com/design/building-blocks/spinners.html<br />
**Para programadores: http://developer.android.com/guide/topics/ui/controls/spinner.html<br />
<br />
==Caso práctico==<br />
*Crear o proxecto '''U2_12_Spinner'''<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.<br />
<br />
<br />
<gallery caption="Spinner Planetas" widths="350" heights="300px" perrow="2"><br />
Image:Android_2013_U2_12_Spinner_11.jpg| Aplicación recén iniciada.<br />
Image:Android_2013_U2_12_Spinner_12.jpg| Seleccionar Xúpiter (5º elemento da lista)<br />
Image:Android_2013_U2_12_Spinner_13.jpg| Premer o botón<br />
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.<br />
</gallery><br />
<br />
===Arquivo de recursos: String-Array===<br />
<gallery caption="Crear array" widths="350" heights="300px" perrow="2"><br />
Image:Android_2013_U2_12_Spinner_01.jpg| En '''/res/values''' crear un novo ficheiro XML de Android. <br />
Image:Android_2013_U2_12_Spinner_02.jpg| Indicar o nome, nesta caso: array_planetas e rematar.<br />
Image:Android_2013_U2_12_Spinner_03.jpg| Engadir un elemento ...<br />
Image:Android_2013_U2_12_Spinner_04.jpg| ... tipo String_Array <br />
Image:Android_2013_U2_12_Spinner_05.jpg| Poñerlle un nome ao recurso: planetas<br />
Image:Android_2013_U2_12_Spinner_06.jpg| Engadir un ...<br />
Image:Android_2013_U2_12_Spinner_07.jpg| ... ítem<br />
Image:Android_2013_U2_12_Spinner_08.jpg| Indicar un valor para ese ítem: Mercurio<br />
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. <br />
Image:Android_2013_U2_12_Spinner_10.jpg| <br />
</gallery><br />
<br />
<br />
*Ficheiro de recursos: array_planetas.xml.<br />
*Polo nome do string_array é por onde se vai acceder ao array.<br />
<syntaxhighlight lang="xml" line highlight="3"><br />
<?xml version="1.0" encoding="utf-8"?><br />
<resources><br />
<string-array name="planetas"><br />
<item>Mercurio</item><br />
<item>Venus</item><br />
<item>Terra</item><br />
<item>Marte</item><br />
<item>Xúpiter</item><br />
<item>Saturno</item><br />
<item>Urano</item><br />
<item>Neptuno</item><br />
</string-array><br />
</resources><br />
</syntaxhighlight><br />
<br />
<br />
<br />
===XML do Layout===<br />
<br />
*Observar como se crea un Spinner<br />
<syntaxhighlight lang="xml" line highlight="7-11,17"><br />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />
xmlns:tools="http://schemas.android.com/tools"<br />
android:layout_width="match_parent"<br />
android:layout_height="match_parent"<br />
android:orientation="vertical" ><br />
<br />
<Spinner<br />
android:id="@+id/spin_planetas"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:entries="@array/planetas" /><br />
<br />
<Button<br />
android:id="@+id/btn_seleccion"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:onClick="onButtonClick"<br />
android:text="Preme cando selecciones" /><br />
<br />
<TextView<br />
android:id="@+id/lbl_resultado"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="Selecciona un planeta" /><br />
<br />
</LinearLayout><br />
</syntaxhighlight><br />
*'''Liña 11''': é onde se vincula o Spinner co recurso tipo array: planetas.<br />
*'''Liña 17''': chamamos a un método cando se faga Click.<br />
<br />
<br />
<br />
===Código Java===<br />
<syntaxhighlight lang="java" line highlight="25-32"><br />
package com.example.u2_12_spinner;<br />
<br />
import android.app.Activity;<br />
import android.os.Bundle;<br />
import android.view.Menu;<br />
import android.view.View;<br />
import android.widget.Spinner;<br />
import android.widget.TextView;<br />
<br />
public class U2_12_Spinner extends Activity {<br />
<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_u2_12__spinner);<br />
}<br />
<br />
@Override<br />
public boolean onCreateOptionsMenu(Menu menu) {<br />
// Inflate the menu; this adds items to the action bar if it is present.<br />
getMenuInflater().inflate(R.menu.u2_12__spinner, menu);<br />
return true;<br />
}<br />
<br />
public void onButtonClick(View v) {<br />
Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);<br />
TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);<br />
<br />
lblResultado.setText("Seleccionaches "<br />
+ spinPlanetas.getSelectedItem() <br />
+ "\nque está na posición " + spinPlanetas.getSelectedItemId());<br />
}<br />
<br />
}<br />
</syntaxhighlight><br />
*'''Liñas 26,27''': Definimos os obxectos nos que recollemos os controis declarados no Layout.<br />
*'''Liñas 31,32''': seleccionamos o elemento da lista e a súa posición.<br />
<br />
===Capturar o evento cando se selecciona un ítem===<br />
*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.<br />
<br />
<syntaxhighlight lang="java" line enclose="div" highlight="19-42" ><br />
package com.example.u2_12_spinner;<br />
<br />
import android.app.Activity;<br />
import android.os.Bundle;<br />
import android.view.Menu;<br />
import android.view.View;<br />
import android.widget.AdapterView;<br />
import android.widget.AdapterView.OnItemSelectedListener;<br />
import android.widget.Spinner;<br />
import android.widget.TextView;<br />
<br />
public class U2_12_Spinner extends Activity {<br />
<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_u2_12__spinner);<br />
<br />
Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);<br />
<br />
spinPlanetas.setOnItemSelectedListener(new OnItemSelectedListener() {<br />
<br />
@Override<br />
public void onItemSelected(AdapterView<?> parent, View view,<br />
int pos, long id) {<br />
// TODO Auto-generated method stub<br />
<br />
TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);<br />
<br />
lblResultado.setText("Seleccionaches "<br />
+ parent.getItemAtPosition(pos)<br />
+ "\nque está na posición " + pos);<br />
<br />
}<br />
<br />
@Override<br />
public void onNothingSelected(AdapterView<?> arg0) {<br />
// TODO Auto-generated method stub<br />
<br />
}<br />
});<br />
}<br />
<br />
@Override<br />
public boolean onCreateOptionsMenu(Menu menu) {<br />
// Inflate the menu; this adds items to the action bar if it is present.<br />
getMenuInflater().inflate(R.menu.u2_12__spinner, menu);<br />
return true;<br />
}<br />
<br />
public void onButtonClick(View v) {<br />
Spinner spinPlanetas = (Spinner) findViewById(R.id.spin_planetas);<br />
TextView lblResultado = (TextView) findViewById(R.id.lbl_resultado);<br />
<br />
lblResultado.setText("Seleccionaches " + spinPlanetas.getSelectedItem()<br />
+ "\nque está na posición " + spinPlanetas.getSelectedItemId());<br />
}<br />
<br />
}<br />
<br />
</syntaxhighlight><br />
*'''Liña 21''': Listener que se chama cando se selecciona un elemento do Spinner<br />
*'''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.<br />
*Parámetros:<br />
**parent: O elemento (AdapterView) onde se fixo a selección.<br />
**view: A vista que foi selecionada dentro do AdapterView<br />
**position: A posición da vista dentro do Adaptador.<br />
**id: Cada ítem pode ter varias filas (neste caso só ten unha) este campo indicaría a fila dentro do ítem<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2015).</div>Angelfg