Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout •...

33
Manejadores en Android LSUB, GYSC, URJC

Transcript of Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout •...

Page 1: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Manejadores en Android

LSUB, GYSC, URJC

Page 2: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Botones

• Vamos a hacer una aplicación con un grupo de botones

Page 3: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Layout

• LinearLayout

• Orientación vertical

• Con dos grupos de botones de radio

• de orientación horizontal

• con dos botones cada uno

Page 4: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

RadioButtons

• On/Off

• Son excluyentes, sólo uno pulsado

Page 5: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Layout<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical" tools:context=".MainActivity" >

<RadioGroup android:id="@+id/grp1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/grp1horiz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="@string/horiz" /> ... </RadioGroup> ...</LinearLayout>

Seleccionado

En strings.xml

Page 6: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Layout

Page 7: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

ActivityMainpublic class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

RadioGroup g1 = (RadioGroup)findViewById(R.id.grp1);Button g1horiz = (Button)findViewById(R.id.grp1horiz);Button g1vert = (Button)findViewById(R.id.grp1vert);RadioGroup g2 = (RadioGroup)findViewById(R.id.grp2);Button g2horiz = (Button)findViewById(R.id.grp2horiz);Button g2vert = (Button)findViewById(R.id.grp2vert);

g1horiz.setOnClickListener(new Orientador(g1, this, LinearLayout.HORIZONTAL));

g2horiz.setOnClickListener(new Orientador(g2, this, LinearLayout.HORIZONTAL));

g1vert.setOnClickListener(new Orientador(g1, this, LinearLayout.VERTICAL));

g2vert.setOnClickListener(new Orientador(g2, this, LinearLayout.VERTICAL));

}

Page 8: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

MainActivity

class Orientador implements OnClickListener {Activity mainWin;RadioGroup grp;int orientation;

Orientador(RadioGroup g, Activity w, int o){mainWin = w;grp = g;orientation = o;

}

@Overridepublic void onClick(View arg0) {

grp.setOrientation(orientation);}

}

Page 9: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

ResultadoY lo podemos probar...

Page 10: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Manejando cambios

• Sin manejador para cada botón

• Usamos uno para cambios en el grupo

Page 11: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Layout <RadioGroup android:id="@+id/grp1" ... <RadioButton android:id="@+id/grphoriz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="@string/horiz" /> ... </RadioGroup> <RadioGroup android:id="@+id/grp2" ... <RadioButton android:id="@id/grphoriz" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:text="@string/horiz" /> ... </RadioGroup>

Declaramos

Lo reusamos

Page 12: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Layout

public class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

RadioGroup g1 = (RadioGroup)findViewById(R.id.grp1);RadioGroup g2 = (RadioGroup)findViewById(R.id.grp2);

Orientador or = new Orientador(this);g1.setOnCheckedChangeListener(or);g2.setOnCheckedChangeListener(or);

}

Page 13: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Manejador

class Orientador implements OnCheckedChangeListener {Activity mainWin;

Orientador(Activity w){mainWin = w;

}

@Overridepublic void onCheckedChanged(RadioGroup g, int id) {

int or = LinearLayout.HORIZONTAL;if(id == R.id.grpvert){

or = LinearLayout.VERTICAL;}g.setOrientation(or);

}}

Page 14: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

CheckButtons

• Checked/Unchecked

• Podemos marcar varios a la vez

Page 15: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Layout<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ... android:orientation="vertical" tools:context=".MainActivity" > <LinearLayout android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal"> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" android:onClick="check" android:text="Turbo" /> <CheckBox ... android:text="Boost" /> </LinearLayout> <LinearLayout ... </LinearLayout></LinearLayout>

Page 16: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

MainActivitypublic class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

}

...

public void check(View v){CheckBox b = (CheckBox) v;String txt = b.getText() + " ";if(b.isChecked()){

txt += "on";}else{

txt += "off";}int time = Toast.LENGTH_SHORT;Toast msg = Toast.makeText(MainActivity.this, txt, time);msg.show();

}}

Page 17: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Resultado

Page 18: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

¿Manejar o no?

• A veces no querremos un manejador

• Consultamos si el botón está “checked” cuando lo necesitemos y listo.

Page 19: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Hay más botones...

• ImageButton

• Botones gráficos

• ToggleButton

• Botón que conmuta entre On-Off

• Similar a CheckBox

• Cambia el texto entre On y Off

Page 20: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Y hay más atributos

• Lo mejor es consultar el Javadoc

• O utilizar la ayuda de contexto en Eclipse

• Y jugar con ellos

Page 21: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Imágenes para botones <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/mi_img_boton"/>

Y como imagen podemos usar un selectoren lugar de un .png (en el directorio drawable, mi_img_boton.xml)

<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/pulsado" /> <item android:state_focused="true" android:drawable="@drawable/foco_en" /> <item android:drawable="@drawable/normal" /> </selector>

Page 22: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas

• Para seleccionar algún elemento de entre un conjunto de ellos.

• Normalmente “pull down”

Page 23: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas

• Precauciones:

• La etiqueta se muestra según esté plegada/desplegada

• Poner un TextView antes que ocupe el lugar de la etiqueta

• Se envía un evento extra al principio y es mejor ignorarlo

Page 24: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/etiqueta"/> <Spinner android:id="@+id/lista" android:prompt="@string/etiqueta" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/entradas" /></LinearLayout>

Page 25: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas

<?xml version="1.0" encoding="utf-8"?><resources>

<string name="app_name">App1</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="etiqueta">Ejemplo de Lista</string>

<string-array name="entradas"> <item>Hola</item> <item>Caracola</item> <item>Adios</item> <item>Oops</item></string-array>

</resources>

Page 26: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas

public class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Spinner lista = (Spinner)findViewById(R.id.lista);lista.setOnItemSelectedListener(new Seleccion(this));

}

Page 27: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas private class Seleccion implements OnItemSelectedListener {

private MainActivity main;private boolean isFirst;

public Seleccion(MainActivity m){main = m;isFirst = true;

}@Overridepublic void onItemSelected(AdapterView<?> lista, View item,

int idx,long id) {if(isFirst){

isFirst = false;return;

}String str = lista.getItemAtPosition(idx).toString();int time = Toast.LENGTH_SHORT;str += " seleccionado";Toast msg = Toast.makeText(MainActivity.this, str, time);msg.show();

}...}

Page 28: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas

private class Seleccion implements OnItemSelectedListener {...

@Overridepublic void onNothingSelected(AdapterView<?> lista) {

int time = Toast.LENGTH_SHORT;String str = "nada seleccionado";Toast msg = Toast.makeText(MainActivity.this, str, time);msg.show();

}

}

Page 29: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas

Page 30: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas dinámicas <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"

android:orientation="vertical" tools:context=".MainActivity" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/etiqueta"/> <Spinner android:id="@+id/lista" android:prompt="@string/etiqueta" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>

Page 31: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas dinámicas

<?xml version="1.0" encoding="utf-8"?><resources>

<string name="app_name">App1</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string> <string name="etiqueta">Ejemplo de Lista</string></resources>

Ahora no tenemos ningún array de strings

Page 32: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas dinámicas public class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Spinner lista = (Spinner)findViewById(R.id.lista);String[] nombres = {"Hola", "Caracola", "Adios", "Oops"};ArrayAdapter<String> arry =

new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, nombres);

arry.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);lista.setAdapter(arry);lista.setOnItemSelectedListener(new Seleccion(this));

}

Page 33: Manejadores en Androidlsub.org › mov › 3.handlers.pdf · Layout • LinearLayout • Orientación vertical • Con dos grupos de botones de radio • de orientación horizontal

Listas dinámicas public class MainActivity extends Activity {

@Overrideprotected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Spinner lista = (Spinner)findViewById(R.id.lista);String[] nombres = {"Hola", "Caracola", "Adios", "Oops"};ArrayAdapter<String> arry =

new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, nombres);

arry.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);lista.setAdapter(arry);lista.setOnItemSelectedListener(new Seleccion(this));

}