https://manuais.iessanclemente.net/index.php?title=Button._ToggleButton._Control_de_eventos_II&feed=atom&action=historyButton. ToggleButton. Control de eventos II - Historial de revisiones2024-03-28T19:57:37ZHistorial de revisiones de esta página en el wikiMediaWiki 1.36.2https://manuais.iessanclemente.net/index.php?title=Button._ToggleButton._Control_de_eventos_II&diff=60676&oldid=prevCarrion: /* Importar unha imaxe como recurso */2016-10-03T07:14:33Z<p><span dir="auto"><span class="autocomment">Importar unha imaxe como recurso</span></span></p>
<p><b>Página nueva</b></p><div>==Introdución==<br />
*Os '''botóns (button)''' permiten ao usuario indicar á aplicación que realice unha acción.<br />
*Os botóns poden ter Texto, unha imaxe ou as dúas cousas:<br />
*Ben o texto ou a imaxe comunican claramente ao usuario cal é a función do botón.<br />
[[Image:00_button-types.png]]<br />
<br />
<br />
*Estes controles son subclases de:<br />
**Button de TextView<br />
**ToogleButton de CompoundButton<br />
**ImageButton de ImageView (que se verá proximamente)<br />
[[Image:00_Part_of_Android_View_Hierarchy.png|600px]]<br />
*Imaxe obtida de: http://www.itcsolutions.eu/2011/08/27/android-tutorial-4-procedural-vs-declarative-design-of-user-interfaces<br />
<br />
<br />
<br />
<br />
*Observar como se definen os tres tipos de botóns anteriores:<br />
<br />
*'''Botón con texto''':<br />
<syntaxhighlight lang="xml" line enclose="div" highlight="4" ><br />
<Button<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="@string/button_text"<br />
... /><br />
</syntaxhighlight><br />
<br />
<br />
*'''Botón con imaxe'''<br />
<syntaxhighlight lang="xml" line enclose="div" highlight="4" ><br />
<ImageButton<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:src="@drawable/button_icon"<br />
... /><br />
</syntaxhighlight><br />
<br />
<br />
*'''Botón con texto e imaxe'''. A propiedade '''android:drawableLeft''' indica onde se sitúa a imaxe.<br />
<syntaxhighlight lang="xml" line enclose="div" highlight="4,5" ><br />
<Button<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="@string/button_text"<br />
android:drawableLeft="@drawable/button_icon"<br />
... /><br />
</syntaxhighlight><br />
<br />
<br />
*Os botóns teñen unha propiedade '''android:onClick="oMeuMetodo"''' que nos permite chamar ao método indicado cando o pulsamos.<br />
**Ese método hai que declaralo en Java como '''puclic void oMeuMetodo (View v) { ... }'''<br />
**Recibe o obxecto View de quen o chamou.<br />
<br />
<br />
*Os botóns (Button) son subclases de '''TextView'''. <br />
<br />
*'''Referencias''':<br />
**O Control botón: http://developer.android.com/reference/android/widget/Button.html<br />
**Introdución aos botóns: http://developer.android.com/design/building-blocks/buttons.html<br />
**Para programadores: http://developer.android.com/guide/topics/ui/controls/button.html<br />
**Para descargar iconas: http://www.iconarchive.com<br />
**Para descargar imaxes: http://www.openclipart.org<br />
<br />
<br />
<br />
===Botóns de 2 estados: ToggleButton/Switch===<br />
*Existe outro tipo de botón de 2 estados (ON/OFF).<br />
*Un máis básico: '''<ToggleButton>'''<br />
[[Image: 00_togglebutton.png]]<br />
<br />
* E outro máis avanzado (versión Android 4.0 ou superior): '''<Switch/>'''<br />
[[Image:00_switch.png]]<br />
**Permiten cambiar o seu estado desprazando co dun estado a outro. O funcionamento é semellante ao control ToogleButton.<br />
<br />
<br />
*Un obxecto ToogleButton/Switch herda da clase '''CompoundButton''', quen, á súa vez, herda da clase '''Button'''.<br />
*Por tanto funcionan da mesma maneira, pero ademais o este tipo de botóns:<br />
**ten 2 estados (True/False), que pode podemos comprobar co método '''isChecked ()'''<br />
**Para cada estado podemos amosar un texto distinto no botón: '''android:TextOn''' e '''android:TextOFF'''.<br />
<br />
<br />
*'''Referencias''':<br />
**O control ToggleButton: http://developer.android.com/reference/android/widget/ToggleButton.html<br />
**O control switch: http://developer.android.com/reference/android/widget/Switch.html <br />
**Introdución as botóns de 2 estados: http://developer.android.com/guide/topics/ui/controls/togglebutton.html<br />
<br />
==Casos prácticos==<br />
*Como sempre creamos un novo proxecto:'''U2_09_Buttons''' <br />
<br />
*Imos crear 3 botóns:<br />
**1 Botón con texto<br />
**1 ToogleButton<br />
**1 botón con imaxe<br />
<br />
<br />
<gallery caption="Tres botóns" widths="350" heights="300px" perrow="2"><br />
Image:Android_2013_U2_09_Buttons_10.jpg| Cando entremos na aplicación este será o seu estado.<br />
Image:Android_2013_U2_09_Buttons_11.jpg| Se prememos o primeiro botón (Texto) amosarase un texto en pantalla.<br />
Image:Android_2013_U2_09_Buttons_12.jpg| Se prememos o segundo botón (ToogleButton) amosarase outro texto en pantalla e o botón cambiará o seu estado e o texto do mesmo.<br />
Image:Android_2013_U2_09_Buttons_14.jpg| Se o volvemos pulsar amosa outro texto e volve cambiar o estado.<br />
Image:Android_2013_U2_09_Buttons_15.jpg| Se prememos o terceiro botón (Imaxe) amosarase de novo un texto diferente.<br />
</gallery><br />
<br />
<br />
<br />
<br />
===Importar unha imaxe como recurso===<br />
*Para poder asignar unha imaxe a un botón esta debe estar no cartafol '''/res/drawable'''<br />
<br />
<gallery caption="Importar unha imaxe" widths="350" heights="300px" perrow="2"><br />
Image:ok.png| Descargamos a imaxe superior ou collemos outra icona calquera. O nome da imaxe só pode ter letras e números e nada máis, nin guións. O nome debe estar en minúscula. Ollo que cando se baixa este icono ten o nome comezando por maiúsculas.<br />
Image:Android_2013_U2_09_Buttons_01.jpg| Dentro de /res/values/ creamos o cartafol '''drawable''' e '''Importamos ...'''<br />
Image:Android_2013_U2_09_Buttons_02.jpg| Dende o sistema de ficheiros. <br />
Image:Android_2013_U2_09_Buttons_03.jpg| Indicamos o cartafol que contén as imaxes e seleccionamos as que desexamos importar para o proxecto.<br />
Image:Android_2013_U2_09_Buttons_04.jpg| Neste caso cópiase ao proxecto. Lembrar cambiar o nome a minúsculas, se este este contén maiúsculas.<br />
</gallery><br />
<br />
*Todo o anterior pode realizarse arrastrando a imaxe dende a súa localización ao IDE, ao cartafol desexado do proxecto dentro do IDE.<br />
*En Android Studio realñizase copiando a imaxe e pegándoa no cartafol drawable no IDE<br />
<br />
===Creación do layout===<br />
*O layout XML ten 3 botóns e 1 TextView:<br />
*Observar como hai un layout dentro doutro: un dispón os elementos en vertical e o outro en horizontal.<br />
<br />
<syntaxhighlight lang="xml" line highlight="7,23,24,32,34"><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 />
<LinearLayout<br />
android:layout_width="match_parent"<br />
android:layout_height="wrap_content"<br />
android:orientation="horizontal" ><br />
<br />
<Button<br />
android:id="@+id/btn_boton"<br />
android:layout_width="150sp"<br />
android:layout_height="wrap_content"<br />
android:text="Preme aquí" ><br />
</Button><br />
<br />
<ToggleButton<br />
android:id="@+id/tbtn_boton_2estados"<br />
android:layout_width="100dp"<br />
android:layout_height="match_parent"<br />
android:textOff="Apagado"<br />
android:textOn="Aceso" ><br />
</ToggleButton><br />
<br />
<ImageButton<br />
android:id="@+id/ibtn_boton_imaxe"<br />
android:layout_width="55sp"<br />
android:layout_height="50sp"<br />
android:scaleType="fitXY"<br />
android:src="@drawable/ok" ><br />
</ImageButton><br />
</LinearLayout><br />
<br />
<TextView<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="@string/texto_tv" /><br />
<br />
</LinearLayout><br />
</syntaxhighlight><br />
<br />
*Se cargamos este layout e non realizamos ningunha codificación en Java, non vai pasar nada cos botóns: <br />
<br />
<gallery caption="Botóns inoperativos" widths="350" heights="300px" perrow="2"><br />
Image:Android_2013_U2_09_Buttons_05.jpg| Prememos no primeiro e non fai nada.<br />
Image:Android_2013_U2_09_Buttons_06.jpg| Se prememos no segundo só cambia o seu estado, pero tampouco fai nada.<br />
Image:Android_2013_U2_09_Buttons_07.jpg| O mesmo pasa co terceiro botón. <br />
</gallery><br />
<br />
==Eventos==<br />
*Nesta ocasión imos ver dun xeito sinxelo como capturar os eventos dos botóns. Máis adiante afondaremos no control de eventos.<br />
*Un '''evento''' é algo que acontece nun control e que nos interesa capturar no sistema para desencadenar (ou non) unha serie de accións.<br />
*Xa vimos no caso anterior (EditText) que podíamos controlar eventos que acontecen nos controis.<br />
*Nesta ocasión para os Botóns imos facelo de dúas formas:<br />
**Control de eventos dende o layout<br />
**Control de eventos a través dunha clase anónima.<br />
<br />
<br />
<br />
===Control de eventos dende o layout===<br />
*É a forma máis sinxela de desencadear unha acción.<br />
*Imos facelo de dúas formas:<br />
**Creando un método para cada Botón.<br />
**Creando un único método para tódolos botóns. Hai que controlar que botón foi o que se premeu.<br />
<br />
====Crear un método para cada botón====<br />
*Observar a propiedade: '''android:onClick''' nos controis dos botóns.<br />
<syntaxhighlight lang="xml" line highlight="16,24,34"><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 />
<LinearLayout<br />
android:layout_width="match_parent"<br />
android:layout_height="wrap_content"<br />
android:orientation="horizontal" ><br />
<br />
<Button<br />
android:id="@+id/btn_boton"<br />
android:layout_width="150sp"<br />
android:layout_height="wrap_content"<br />
android:onClick="onBotonClick"<br />
android:text="Preme aquí" ><br />
</Button><br />
<br />
<ToggleButton<br />
android:id="@+id/tbtn_boton_2estados"<br />
android:layout_width="100dp"<br />
android:layout_height="match_parent"<br />
android:onClick="onBoton2EstadosClick"<br />
android:textOff="Apagado"<br />
android:textOn="Aceso" ><br />
</ToggleButton><br />
<br />
<ImageButton<br />
android:id="@+id/ibtn_boton_imaxe"<br />
android:layout_width="55sp"<br />
android:layout_height="50sp"<br />
android:contentDescription="Botón imaxe"<br />
android:onClick="onBotonImaxeClick"<br />
android:scaleType="fitXY"<br />
android:src="@drawable/ok" ><br />
</ImageButton><br />
</LinearLayout><br />
<br />
<TextView<br />
android:id="@+id/tv_accion"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="@string/texto_tv" /><br />
<br />
</LinearLayout><br />
</syntaxhighlight><br />
<br />
*Para cada botón defínese un método que xestione o evento onClick.<br />
*'''Deixamos para o participante no curso a definición no ficheiro /res/values/strings.xml da constante "@string/texto_tv" do último TextView. '''<br />
<br />
*Agora só queda definir os métodos en Java.<br />
<syntaxhighlight lang="java" line highlight="29-32,34-40,42-45"><br />
package com.example.u2_09_buttons;<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.Button;<br />
import android.widget.ImageButton;<br />
import android.widget.TextView;<br />
import android.widget.ToggleButton;<br />
<br />
public class U2_09_Buttons extends Activity {<br />
private Button btnBoton;<br />
private ToggleButton tbtnBoton2Estados;<br />
private ImageButton ibtnBotonImaxe;<br />
private TextView tvAccions;<br />
<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_u2_09__buttons);<br />
<br />
btnBoton = (Button) findViewById(R.id.btn_boton);<br />
tbtnBoton2Estados = (ToggleButton) findViewById(R.id.tbtn_boton_2estados);<br />
ibtnBotonImaxe = (ImageButton) findViewById(R.id.ibtn_boton_imaxe);<br />
tvAccions = (TextView) findViewById(R.id.tv_accion);<br />
}<br />
<br />
public void onBotonClick(View v) {<br />
tvAccions.setText("Premeches o primeiro botón\n");<br />
tvAccions.append("O texto do botón é: " + btnBoton.getText());<br />
}<br />
<br />
public void onBoton2EstadosClick(View v) {<br />
tvAccions.setText("Premeches o segundo botón\n");<br />
if (tbtnBoton2Estados.isChecked())<br />
tvAccions.append("O estado é: " + tbtnBoton2Estados.getTextOn());<br />
else<br />
tvAccions.append("O estado é: " + tbtnBoton2Estados.getTextOff());<br />
}<br />
<br />
public void onBotonImaxeClick(View v) {<br />
tvAccions.setText("Premeches o terceiro botón\n");<br />
tvAccions.append("O ancho é: " + ibtnBotonImaxe.getWidth());<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_09__buttons, menu);<br />
return true;<br />
}<br />
<br />
}<br />
</syntaxhighlight><br />
*'''Liñas 13-16''': declaración de atributos.<br />
*'''Liñas 23-26''': asignación de valores aos atributos mediante a clase R.<br />
*'''Liñas 29-32''': Define o método asociado ao evento android:onClick do primeiro botón. "\n" introduce un salto de liña.<br />
*'''Liñas 34-40''': Define o método asociado ao evento android:onClick do botón ToggleButton. Comprobamos se está activado o non.<br />
*'''Liñas 42-45''': Define o método asociado ao evento android:onClick do botón con Imaxe.<br />
<br />
*Lanzar a aplicación e comprobar que sucede ao premer os botóns.<br />
<br />
====Crear un único método para tódolos botóns====<br />
<br />
*Hai que modificar o XML para que as propiedades '''android:onClick''' de tódolos botóns chamen ao mesmo método.<br />
<syntaxhighlight lang="xml" line highlight="16,24,34"><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 />
<LinearLayout<br />
android:layout_width="match_parent"<br />
android:layout_height="wrap_content"<br />
android:orientation="horizontal" ><br />
<br />
<Button<br />
android:id="@+id/btn_boton"<br />
android:layout_width="150sp"<br />
android:layout_height="wrap_content"<br />
android:onClick="onBotonClick"<br />
android:text="Preme aquí" ><br />
</Button><br />
<br />
<ToggleButton<br />
android:id="@+id/tbtn_boton_2estados"<br />
android:layout_width="100dp"<br />
android:layout_height="match_parent"<br />
android:onClick="onBotonClick"<br />
android:textOff="Apagado"<br />
android:textOn="Aceso" ><br />
</ToggleButton><br />
<br />
<ImageButton<br />
android:id="@+id/ibtn_boton_imaxe"<br />
android:layout_width="55sp"<br />
android:layout_height="50sp"<br />
android:contentDescription="Botón imaxe"<br />
android:onClick="onBotonClick"<br />
android:scaleType="fitXY"<br />
android:src="@drawable/ok" ><br />
</ImageButton><br />
</LinearLayout><br />
<br />
<TextView<br />
android:id="@+id/tv_accion"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="@string/texto_tv" /><br />
<br />
</LinearLayout><br />
</syntaxhighlight><br />
<br />
<br />
<br />
<br />
*A definición do método:<br />
<syntaxhighlight lang="java" line highlight="28-51"><br />
package com.example.u2_09_buttons;<br />
<br />
import android.app.Activity;<br />
import android.os.Bundle;<br />
import android.view.Menu;<br />
import android.view.View;<br />
import android.view.View.OnClickListener;<br />
import android.widget.Button;<br />
import android.widget.ImageButton;<br />
import android.widget.TextView;<br />
import android.widget.ToggleButton;<br />
<br />
public class U2_09_Buttons extends Activity {<br />
// private Button btnBoton;<br />
// private ToggleButton tbtnBoton2Estados;<br />
// private ImageButton ibtnBotonImaxe;<br />
private TextView tvAccions;<br />
<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_u2_09__buttons);<br />
<br />
tvAccions = (TextView) findViewById(R.id.tv_accion);<br />
<br />
}<br />
<br />
public void onBotonClick(View vista) {<br />
<br />
switch (vista.getId()) {<br />
case R.id.btn_boton:<br />
tvAccions.setText("Premeches o primeiro botón\n");<br />
tvAccions.append("O texto do botón é: "<br />
+ ((Button) vista).getText());<br />
break;<br />
<br />
case R.id.tbtn_boton_2estados:<br />
tvAccions.setText("Premeches o segundo botón\n");<br />
if (((ToggleButton) vista).isChecked())<br />
tvAccions.append("O estado é: "<br />
+ ((ToggleButton) vista).getTextOn());<br />
else<br />
tvAccions.append("O estado é: "<br />
+ ((ToggleButton) vista).getTextOff());<br />
break;<br />
<br />
case R.id.ibtn_boton_imaxe:<br />
tvAccions.setText("Premeches o terceiro botón\n");<br />
tvAccions.append("O ancho é: " + ((ImageButton) vista).getWidth()); <br />
}<br />
}<br />
<br />
/*public void onBotonClick(View v) {<br />
tvAccions.setText("Premeches o primeiro botón\n");<br />
tvAccions.append("O texto do botón é: " + btnBoton.getText());<br />
}*/<br />
<br />
<br />
/*<br />
public void onBoton2EstadosClick(View v) {<br />
tvAccions.setText("Premeches o segundo botón\n"); if<br />
(tbtnBoton2Estados.isChecked()) tvAccions.append("O estado é: " +<br />
tbtnBoton2Estados.getTextOn()); else tvAccions.append("O estado é: " +<br />
tbtnBoton2Estados.getTextOff()); }<br />
*/<br />
<br />
<br />
/*<br />
public void onBotonImaxeClick(View v) {<br />
tvAccions.setText("Premeches o terceiro botón\n");<br />
tvAccions.append("O ancho é: " + ibtnBotonImaxe.getWidth()); }<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_09__buttons, menu);<br />
return true;<br />
}<br />
<br />
}<br />
</syntaxhighlight><br />
*'''Liñas 28-51''':<br />
**Na chamada ao método recibimos como parámetro unha View (vista) que apunta ao obxecto que o chamou.<br />
**Collendo o ID da vista, podemos saber que botón foi o que iniciou o evento.<br />
**Con '''switch - case''', en función do botón que lanzou o evento executamos o código correspondente.<br />
*'''Liñas 39, 41 e 43''':<br />
**Observar como se fai casting do obxecto recibido. Recíbese un obxecto de tipo View (vista) e precisamos convertelo á ToogleButton para acceder aos seus métodos específicos.<br />
<br />
===Control de eventos usando un listener. Clase anónima===<br />
*Nesta ocasión imos crear un Listener para o primeiro botón. Co cal, hai que eliminar a propiedade '''android:onClick''' do XML do primeiro botón<br />
<br />
<br />
*O ficheiro XML:<br />
*Observar que no primeiro botón non se xestiona o evento onClick e que os outros dous botóns seguen mantendo a propiedade '''android:onClick'''. <br />
<syntaxhighlight lang="xml" line highlight="12-17,23,33"><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 />
<LinearLayout<br />
android:layout_width="match_parent"<br />
android:layout_height="wrap_content"<br />
android:orientation="horizontal" ><br />
<br />
<Button<br />
android:id="@+id/btn_boton"<br />
android:layout_width="150sp"<br />
android:layout_height="wrap_content"<br />
android:text="Preme aquí" ><br />
</Button><br />
<br />
<ToggleButton<br />
android:id="@+id/tbtn_boton_2estados"<br />
android:layout_width="100dp"<br />
android:layout_height="match_parent"<br />
android:onClick="onBoton2EstadosClick"<br />
android:textOff="Apagado"<br />
android:textOn="Aceso" ><br />
</ToggleButton><br />
<br />
<ImageButton<br />
android:id="@+id/ibtn_boton_imaxe"<br />
android:layout_width="55sp"<br />
android:layout_height="50sp"<br />
android:contentDescription="Botón imaxe"<br />
android:onClick="onBotonImaxeClick"<br />
android:scaleType="fitXY"<br />
android:src="@drawable/ok" ><br />
</ImageButton><br />
</LinearLayout><br />
<br />
<TextView<br />
android:id="@+id/tv_accion"<br />
android:layout_width="wrap_content"<br />
android:layout_height="wrap_content"<br />
android:text="@string/texto_tv" /><br />
<br />
</LinearLayout><br />
</syntaxhighlight><br />
<br />
<br />
<br />
<br />
*Imos partir do código da primeira versión da ampliación.<br />
*Comentaremos aquel código que afectaba ao primeiro botón e usaremos un Listener asociado ao primeiro botón.<br />
<syntaxhighlight lang="java" line highlight="29-38"><br />
package com.example.u2_09_buttons;<br />
<br />
import android.app.Activity;<br />
import android.os.Bundle;<br />
import android.view.Menu;<br />
import android.view.View;<br />
import android.view.View.OnClickListener;<br />
import android.widget.Button;<br />
import android.widget.ImageButton;<br />
import android.widget.TextView;<br />
import android.widget.ToggleButton;<br />
<br />
public class U2_09_Buttons extends Activity {<br />
private Button btnBoton;<br />
private ToggleButton tbtnBoton2Estados;<br />
private ImageButton ibtnBotonImaxe;<br />
private TextView tvAccions;<br />
<br />
@Override<br />
protected void onCreate(Bundle savedInstanceState) {<br />
super.onCreate(savedInstanceState);<br />
setContentView(R.layout.activity_u2_09__buttons);<br />
<br />
btnBoton = (Button) findViewById(R.id.btn_boton);<br />
tbtnBoton2Estados = (ToggleButton) findViewById(R.id.tbtn_boton_2estados);<br />
ibtnBotonImaxe = (ImageButton) findViewById(R.id.ibtn_boton_imaxe);<br />
tvAccions = (TextView) findViewById(R.id.tv_accion);<br />
<br />
btnBoton.setOnClickListener(new OnClickListener() {<br />
<br />
@Override<br />
public void onClick(View v) {<br />
// TODO Auto-generated method stub<br />
tvAccions.setText("Premeches o primeiro botón\n");<br />
tvAccions.append("O texto do botón é: " + btnBoton.getText());<br />
}<br />
<br />
});<br />
<br />
}<br />
<br />
/* public void onBotonClick(View v) {<br />
tvAccions.setText("Premeches o primeiro botón\n");<br />
tvAccions.append("O texto do botón é: " + btnBoton.getText());<br />
}<br />
*/ <br />
<br />
public void onBoton2EstadosClick(View v) {<br />
tvAccions.setText("Premeches o segundo botón\n");<br />
if (tbtnBoton2Estados.isChecked())<br />
tvAccions.append("O estado é: " + tbtnBoton2Estados.getTextOn());<br />
else<br />
tvAccions.append("O estado é: " + tbtnBoton2Estados.getTextOff());<br />
}<br />
<br />
public void onBotonImaxeClick(View v) {<br />
tvAccions.setText("Premeches o terceiro botón\n");<br />
tvAccions.append("O ancho é: " + ibtnBotonImaxe.getWidth());<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_09__buttons, menu);<br />
return true;<br />
}<br />
<br />
}<br />
</syntaxhighlight><br />
*'''Liñas 29-38''': chamamos ao método '''setOnClickListener()''' do primeiro botón que se activará cando se fai click no botón.<br />
** Creamos unha clase anónima asociada a interface OnClickListener e sobreescribimos o único método que ten: '''onClick'''.<br />
<br />
<br />
*Como xa se dixo no anterior control (EditText), para coñecer o método asociado ao botón escribimos '''obxecto.setOn''', prememos '''CTRL+Barra espaciadora''' e xa nos auto completa. <br />
*O mesmo facemos para a creación da clase anónima.<br />
<br />
*Premer '''CTRL + Barra espaciadora'''<br />
[[Image:Android_2013_U2_09_Buttons_08.jpg|600px]]<br />
<br />
<br />
*Clase anónima co seu método.<br />
[[Image:Android_2013_U2_09_Buttons_09.jpg]]<br />
<br />
<br />
*Quedan presentados os '''listeners''' máis adiante afondaremos sobre eles. <br />
<br />
<br />
<br />
<br />
<br> -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2015).</div>Carrion