manejadores en androidlsub.org › mov › 3.handlers.pdf · layout • linearlayout •...
TRANSCRIPT
![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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/18.jpg)
¿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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.site/reader035/viewer/2022070814/5f0da34c7e708231d43b57e0/html5/thumbnails/33.jpg)
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));
}