Diferencia entre revisiones de «RadioButton»
Ir a la navegación
Ir a la búsqueda
| Línea 149: | Línea 149: | ||
<br /> | <br /> | ||
| + | ===Control de eventos usando un listener=== | ||
| + | |||
| + | * Xa o vimos [http://wiki.cifprodolfoucha.es/index.php?title=PDM_Xesti%C3%B3n_de_Eventos na xestión de eventos] que podemos xestionar os eventos facendo uso dunha clase anónima que implemente a interface ou implementar a interface na Activity. | ||
| + | : Os radiobutton non son máis que un tipo de botón e polo tanto podemos empregar a mesma interface que nos Button como vimos no enlace anterior. | ||
| + | |||
| + | : Queda como tarefa para o alumno, implementar a xestión de eventos deste exercicio facendo uso das interfaces (lembrar quitalo do layout). | ||
| + | |||
| + | |||
| + | * <u>Lembrar que esta será a forma obrigatoria de facelo</u>. | ||
| + | |||
| + | <br /> | ||
==Caso práctico 2== | ==Caso práctico 2== | ||
| Línea 162: | Línea 173: | ||
<br /> | <br /> | ||
| − | * Dentro do paquete '''RadioButtons''' crear unha nova 'Empty Activity' de nome: ''' | + | * Dentro do paquete '''RadioButtons''' crear unha nova 'Empty Activity' de nome: '''UD02_02_RadioButtons''' 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]. | : 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]. | ||
| Línea 181: | Línea 192: | ||
*Observar como '''RadioGroup''' é un layout máis de tipo Linear. | *Observar como '''RadioGroup''' é un layout máis de tipo Linear. | ||
*Observar como a primeira opción está activada por defecto. | *Observar como a primeira opción está activada por defecto. | ||
| − | <syntaxhighlight lang="xml | + | <syntaxhighlight lang="xml" > |
<?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||
| − | < | + | <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" |
| + | xmlns:app="http://schemas.android.com/apk/res-auto" | ||
| + | xmlns:tools="http://schemas.android.com/tools" | ||
android:layout_width="match_parent" | android:layout_width="match_parent" | ||
android:layout_height="match_parent" | android:layout_height="match_parent" | ||
| − | + | tools:context=".UD02_02_RadioButtons"> | |
<RadioGroup | <RadioGroup | ||
| − | android:layout_width=" | + | android:id="@+id/rgrpGrupoBotons" |
| + | android:layout_width="wrap_content" | ||
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||
| − | android:orientation=" | + | android:layout_marginStart="8dp" |
| + | android:layout_marginTop="8dp" | ||
| + | android:orientation="horizontal" | ||
| + | app:layout_constraintStart_toStartOf="parent" | ||
| + | app:layout_constraintTop_toTopOf="parent"> | ||
<RadioButton | <RadioButton | ||
| − | android:id="@+id/ | + | android:id="@+id/rbtnMaior18_UD02_02_Radio" |
| − | android:layout_width=" | + | android:layout_width="match_parent" |
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||
android:checked="true" | android:checked="true" | ||
| − | |||
android:text=">18 anos" /> | android:text=">18 anos" /> | ||
<RadioButton | <RadioButton | ||
| − | android:id="@+id/ | + | android:id="@+id/rbtnMenor18_UD02_02_Radio" |
| − | android:layout_width=" | + | android:layout_width="match_parent" |
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||
| − | |||
android:text="<=18 anos" /> | android:text="<=18 anos" /> | ||
</RadioGroup> | </RadioGroup> | ||
<EditText | <EditText | ||
| − | android:id="@+id/ | + | android:id="@+id/edtResultado_UD02_02_Radio" |
| − | android:layout_width=" | + | android:layout_width="wrap_content" |
android:layout_height="wrap_content" | android:layout_height="wrap_content" | ||
| − | android: | + | android:layout_marginStart="8dp" |
| − | + | android:layout_marginTop="24dp" | |
| − | </ | + | android:ems="10" |
| + | android:inputType="textPersonName" | ||
| + | app:layout_constraintStart_toStartOf="parent" | ||
| + | app:layout_constraintTop_toBottomOf="@+id/rgrpGrupoBotons" /> | ||
| + | </androidx.constraintlayout.widget.ConstraintLayout> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 222: | Línea 242: | ||
<br /> | <br /> | ||
===Código Java=== | ===Código Java=== | ||
| + | <u>Nota:</u> Este exemplo está feito cunha versión actual de Android Studio onde xa non podemos indicar a opción 'Sen compatibilidade' ao crear a activity, polo que no exemplo deriva de AppCompactActivity. | ||
*Implementamos o método '''controlarIdade''' | *Implementamos o método '''controlarIdade''' | ||
| − | <syntaxhighlight lang="java" | + | <syntaxhighlight lang="java" highlight="17-30"> |
package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.RadioButtons; | package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.RadioButtons; | ||
| − | import | + | import androidx.appcompat.app.AppCompatActivity; |
| + | |||
import android.os.Bundle; | import android.os.Bundle; | ||
| − | |||
import android.widget.EditText; | import android.widget.EditText; | ||
| + | import android.widget.RadioGroup; | ||
| − | + | public class UD02_02_RadioButtons extends AppCompatActivity { | |
| − | + | @Override | |
| + | protected void onCreate(Bundle savedInstanceState) { | ||
| + | super.onCreate(savedInstanceState); | ||
| + | setContentView(R.layout.activity_u_d02_02_b__radio_buttons); | ||
| − | + | RadioGroup radioGroup = findViewById(R.id.rgrpGrupoBotons); | |
| + | radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { | ||
| + | @Override | ||
| + | public void onCheckedChanged(RadioGroup radioGroup, int i) { | ||
| + | EditText caixa = findViewById(R.id.edtResultado_UD02_02_Radio); | ||
| + | switch (i){ | ||
| + | case R.id.rbtnMaior18_UD02_02_Radio: | ||
| + | caixa.setText("Tes máis de 18 anos"); | ||
| + | break; | ||
| + | case R.id.rbtnMenor18_UD02_02_Radio: | ||
| + | caixa.setText("Tes menos de 18 anos"); | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
} | } | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | *'''Liñas 17-30''': Implementamos a [https://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener interface OnCheckedChangeListener] '''sobre o RadioGroup'''. | ||
| + | : Desta forma sabemos sobre que botón se fixo click por medio do segundo parámetro (int i). | ||
| + | |||
| + | |||
| + | * Indicar que por defecto está seleccionado o primeiro radiobutton a nivel gráfico (do layout) e isto non provoca a execución do evento de click. | ||
| + | : Se queremos que se provoque dito evento, <u>non debemos de seleccionar ningún radiobutton no deseño</u> e no código facer unha chamada ao [https://developer.android.com/reference/android/widget/RadioGroup#check(int) método check(int id)]. | ||
| + | |||
| + | <syntaxhighlight lang="java" highlight="31"> | ||
| + | package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.RadioButtons; | ||
| + | import androidx.appcompat.app.AppCompatActivity; | ||
| + | |||
| + | import android.os.Bundle; | ||
| + | import android.widget.EditText; | ||
| + | import android.widget.RadioGroup; | ||
| + | |||
| + | public class UD02_02_RadioButtons extends AppCompatActivity { | ||
@Override | @Override | ||
protected void onCreate(Bundle savedInstanceState) { | protected void onCreate(Bundle savedInstanceState) { | ||
super.onCreate(savedInstanceState); | super.onCreate(savedInstanceState); | ||
| − | setContentView(R.layout. | + | setContentView(R.layout.activity_u_d02_02_b__radio_buttons); |
| + | |||
| + | RadioGroup radioGroup = findViewById(R.id.rgrpGrupoBotons); | ||
| + | radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { | ||
| + | @Override | ||
| + | public void onCheckedChanged(RadioGroup radioGroup, int i) { | ||
| + | EditText caixa = findViewById(R.id.edtResultado_UD02_02_Radio); | ||
| + | switch (i){ | ||
| + | case R.id.rbtnMaior18_UD02_02_Radio: | ||
| + | caixa.setText("Tes máis de 18 anos"); | ||
| + | break; | ||
| + | case R.id.rbtnMenor18_UD02_02_Radio: | ||
| + | caixa.setText("Tes menos de 18 anos"); | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | }); | ||
| + | radioGroup.check(R.id.rbtnMaior18_UD02_02_Radio); | ||
| + | |||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| − | |||
Revisión del 08:57 25 oct 2020
Sumario
Introdución
- O control RadioButton permite escoller unha opción entre varias posibles.
- Aconséllase usar este control sempre que se queiran amosar ao usuario múltiples opcións, unha ao carón doutra.
- En caso contrario débese usar un Spinner (Lista despregable).
- No layout os RadioButton organízanse dentro dun RadioGroup que vai controlar que non haxa máis dunha opción marcada.
- Nota: polas opcións que ofrece a imaxe, tomada de Android SDK, aí debe traballar un galego.
- RadioGroup herda da clase LinearLayout co cal terá as súas propiedades, entre elas: android:orientation
- RadioButton herda da clase CompoundButton ao igual que CheckBox:
- Por tanto, funcionan da mesma maneira:
- Ten 2 estados (True/False), que podemos comprobar co método isChecked ().
- Podemos cambiar o seu estado por programación chamando ao método setChecked(boolean)
- Podemos xestionar o cambio de estado dun RadioButton coa chamada ao método setOnCheckedChangeListener(OnCheckedChangeListener)
- Tamén podemos xestionar os eventos da mesma forma que nos botóns, coa interface OnClickListener ou pola propiedade android:onCLick.
- Imaxe obtida de: http://www.itcsolutions.eu/2011/08/27/android-tutorial-4-procedural-vs-declarative-design-of-user-interfaces
- Referencias:
- Control RadioButton: http://developer.android.com/reference/android/widget/RadioButton.html
- Control RadioGroup: http://developer.android.com/reference/android/widget/RadioGroup.html
- Introdución ao control: http://developer.android.com/guide/topics/ui/controls/radiobutton.html
Caso práctico 1 (non recomendado)
- Nota: Neste exemplo a xestión do evento click faise sobre cada un dos radiobutton e se fai, en parte, modificando o código do layout onde se atopan.
- Non se recomenda mesturar a parte gráfica (deseño) coa de xestión de eventos. É unha recomendación, non implica que non se poida facer.
- Partimos que xa temos creado o proxecto inicial como xa indicamos anteriormente.
- Lembrar que se estades a empregar as bibliotecas de compatibilidade (por defecto), a vosa activity derivará de AppCompactActivity e non de Activity
- Nos exemplos seguintes toda activity deriva de Activity, pero o normal é que empregedes AppCompactActivity (coidado ao copiar os exemplos).
- 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: RadioButtons.
- Dentro do paquete RadioButtons crear unha nova 'Empty Activity' de nome: UD02_01_RadioButtons 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.
- Imos crear unha aplicación na que o usuario indique se é ou non maior de idade e que se amose a opción escollida no EditText.
- RadioButton
XML do Layout
- Observar como RadioGroup é un layout máis de tipo Linear.
- Observar como a primeira opción está activada por defecto.
1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <RadioGroup
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:orientation="vertical" >
11
12 <RadioButton
13 android:id="@+id/rbtnMaior18_UD02_01_Radio"
14 android:layout_width="wrap_content"
15 android:layout_height="wrap_content"
16 android:checked="true"
17 android:onClick="controlarIdade"
18 android:text=">18 anos" />
19
20 <RadioButton
21 android:id="@+id/rbtnMenor18_UD02_01_Radio"
22 android:layout_width="wrap_content"
23 android:layout_height="wrap_content"
24 android:onClick="controlarIdade"
25 android:text="<=18 anos" />
26 </RadioGroup>
27
28 <EditText
29 android:id="@+id/txtResultado_UD02_01_Radio"
30 android:layout_width="match_parent"
31 android:layout_height="wrap_content"
32 android:hint="Resultado" />
33
34 </LinearLayout>
Código Java
- Implementamos o método controlarIdade
1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.RadioButtons;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.widget.EditText;
7
8 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
9
10 public class UD02_01_RadioButtons extends Activity {
11
12 public void controlarIdade(View view) {
13
14 EditText caixa = (EditText) findViewById(R.id.txtResultado_UD02_01_Radio);
15
16 switch (view.getId()) {
17 case R.id.rbtnMaior18_UD02_01_Radio:
18 caixa.setText("Tes máis de 18 anos");
19 break;
20 case R.id.rbtnMenor18_UD02_01_Radio:
21 caixa.setText("Tes menos de 18 anos");
22 break;
23 }
24 }
25
26
27 @Override
28 protected void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.activity_ud02_01__radio_buttons);
31 }
32 }
- Liña 16: Indagamos que cal é o ID da opción na que se fixo click.
Control de eventos usando un listener
- Xa o vimos na xestión de eventos que podemos xestionar os eventos facendo uso dunha clase anónima que implemente a interface ou implementar a interface na Activity.
- Os radiobutton non son máis que un tipo de botón e polo tanto podemos empregar a mesma interface que nos Button como vimos no enlace anterior.
- Queda como tarefa para o alumno, implementar a xestión de eventos deste exercicio facendo uso das interfaces (lembrar quitalo do layout).
- Lembrar que esta será a forma obrigatoria de facelo.
Caso práctico 2
- O mesmo obxectivo que no caso práctico 1, pero sen facelo no layout.
- Partimos que xa temos creado o proxecto inicial como xa indicamos anteriormente.
- Lembrar que se estades a empregar as bibliotecas de compatibilidade (por defecto), a vosa activity derivará de AppCompactActivity e non de Activity
- Nos exemplos seguintes toda activity deriva de Activity, pero o normal é que empregedes AppCompactActivity (coidado ao copiar os exemplos).
- 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: RadioButtons.
- Dentro do paquete RadioButtons crear unha nova 'Empty Activity' de nome: UD02_02_RadioButtons 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.
- Imos crear unha aplicación na que o usuario indique se é ou non maior de idade e que se amose a opción escollida no EditText.
- RadioButton
XML do Layout
- Observar como RadioGroup é un layout máis de tipo Linear.
- Observar como a primeira opción está activada por defecto.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".UD02_02_RadioButtons">
<RadioGroup
android:id="@+id/rgrpGrupoBotons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:orientation="horizontal"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RadioButton
android:id="@+id/rbtnMaior18_UD02_02_Radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"
android:text=">18 anos" />
<RadioButton
android:id="@+id/rbtnMenor18_UD02_02_Radio"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="<=18 anos" />
</RadioGroup>
<EditText
android:id="@+id/edtResultado_UD02_02_Radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="24dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rgrpGrupoBotons" />
</androidx.constraintlayout.widget.ConstraintLayout>
Código Java
Nota: Este exemplo está feito cunha versión actual de Android Studio onde xa non podemos indicar a opción 'Sen compatibilidade' ao crear a activity, polo que no exemplo deriva de AppCompactActivity.
- Implementamos o método controlarIdade
package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.RadioButtons;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.RadioGroup;
public class UD02_02_RadioButtons extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_u_d02_02_b__radio_buttons);
RadioGroup radioGroup = findViewById(R.id.rgrpGrupoBotons);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
EditText caixa = findViewById(R.id.edtResultado_UD02_02_Radio);
switch (i){
case R.id.rbtnMaior18_UD02_02_Radio:
caixa.setText("Tes máis de 18 anos");
break;
case R.id.rbtnMenor18_UD02_02_Radio:
caixa.setText("Tes menos de 18 anos");
break;
}
}
});
}
}
- Liñas 17-30: Implementamos a interface OnCheckedChangeListener sobre o RadioGroup.
- Desta forma sabemos sobre que botón se fixo click por medio do segundo parámetro (int i).
- Indicar que por defecto está seleccionado o primeiro radiobutton a nivel gráfico (do layout) e isto non provoca a execución do evento de click.
- Se queremos que se provoque dito evento, non debemos de seleccionar ningún radiobutton no deseño e no código facer unha chamada ao método check(int id).
package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.RadioButtons;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.RadioGroup;
public class UD02_02_RadioButtons extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_u_d02_02_b__radio_buttons);
RadioGroup radioGroup = findViewById(R.id.rgrpGrupoBotons);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
EditText caixa = findViewById(R.id.edtResultado_UD02_02_Radio);
switch (i){
case R.id.rbtnMaior18_UD02_02_Radio:
caixa.setText("Tes máis de 18 anos");
break;
case R.id.rbtnMenor18_UD02_02_Radio:
caixa.setText("Tes menos de 18 anos");
break;
}
}
});
radioGroup.check(R.id.rbtnMaior18_UD02_02_Radio);
}
}
-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).