CheckBox
Sumario
Introdución
- Un CheckBox permite ao usuario elixir unha ou máis opcións dentro dun conxunto.
- Este control ao igual que ToggleButton e Switch herda da clase CompoundButton, quen, á súa vez, herda da clase Button.
- Imaxe obtida de: http://www.itcsolutions.eu/2011/08/27/android-tutorial-4-procedural-vs-declarative-design-of-user-interfaces
- Por tanto, funcionan da mesma maneira:
- Ten 2 estados (True/False), que podemos comprobar co método isChecked ().
- Podemos cambiar o seu estado cambiar o seu estado por programación chamando ao método setChecked(boolean)
- Podemos xestionar o cambio de estado dun CheckBox coa chamada ao método setOnCheckedChangeListener(OnCheckedChangeListener)
- Tamén podemos xestionar os eventos da mesma forma que nos botóns, coa interface OnClickListener.
- Para usalo nun XML layout usar a etiqueta <CheckBox/>
- Referencias:
- O control CheckBox: http://developer.android.com/reference/android/widget/CheckBox.html
- Introdución ao CheckBox: http://developer.android.com/guide/topics/ui/controls/checkbox.html
Caso práctico 1
- Partimos que xa temos creado o proxecto inicial como xa indicamos anteriormente.
- 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: Checkboxes.
- Dentro do paquete Checkboxes crear unha nova 'Empty Activity' de nome: UD02_01_CkeckBox 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 as súas afeccións ("Aficiones").
- Indicar que neste exemplo a xestión de eventos faise asociando no Layout un método da activity ao que vai chamar cando o usuario prema no CheckBox.
- Esta forma non é aconsellable xa que estamos mesturando o deseño coa programación de eventos. Mirar o Caso Práctico 2 para unha correcta xestión do evento.
Layout xml
- Nota: Lembrar que o deseño pódese facer graficamente dende o Android Studio.
- Cada CheckBox chama a un método cando se marca ou desmarca ese CheckBox.
- O método é o mesmo para os tres.
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 <CheckBox
8 android:id="@+id/chkInformatica_UD02_01_check"
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 android:onClick="controlarAfeccions"
12 android:text="Informática" />
13
14 <CheckBox
15 android:id="@+id/chkLer_UD02_01_check"
16 android:layout_width="wrap_content"
17 android:layout_height="wrap_content"
18 android:onClick="controlarAfeccions"
19 android:text="Ler" />
20
21 <CheckBox
22 android:id="@+id/chkDeporte_UD02_01_check"
23 android:layout_width="wrap_content"
24 android:layout_height="wrap_content"
25 android:onClick="controlarAfeccions"
26 android:text="Deportes" />
27
28 <EditText
29 android:id="@+id/txtResultado_UD02_01_check"
30 android:layout_width="match_parent"
31 android:layout_height="wrap_content"
32 android:hint="Resultado" />
33
34 </LinearLayout>
Código Java
1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.CheckBoxes;
2
3 import android.app.Activity;
4 import android.os.Bundle;
5 import android.view.View;
6 import android.widget.CheckBox;
7 import android.widget.EditText;
8
9 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
10
11 public class UD02_01_CkeckBox extends Activity {
12
13 public void controlarAfeccions(View view) {
14 CheckBox check = (CheckBox) view;
15
16 EditText caixa = (EditText) findViewById(R.id.txtResultado_UD02_01_check);
17 if (check.isChecked())
18 caixa.setText("Marcaches: " + check.getText());
19 else
20 caixa.setText("Desmarcaches: " + check.getText());
21 }
22
23 @Override
24 protected void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);
26 setContentView(R.layout.activity_ud02_01__ckeck_box);
27 }
28 }
- Liña 13, recibimos a Vista do elemento pulsado hai que facer un casting para convertelo ao tipo CheckBox.
- Liña 17, comprobamos se se marcou ou desmarcou o control.
Nota: Nos vosos proxectos ides controlar a xestión de eventos implementando a interface na activity.
Caso práctico 2
- Neste caso imos xestionar o evento de cambio de estado do CheckBox implementando a interface correspondente na Activity.
- Lembrar que xa vimos nesta Wiki as diferentes formas de implementar as interfaces.
- Partimos que xa temos creado o proxecto inicial como xa indicamos anteriormente.
- 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: Checkboxes.
- Dentro do paquete Checkboxes crear unha nova 'Empty Activity' de nome: UD02_02_CkeckBox de tipo Launcher.
- Modifica o arquivo AndroidManifiest.xml e engade unha label á activity como xa vimos na creación do proxecto base.
- Imos xestionar o evento de Click sobre dúas Checkbox pero empregando a interface 'OnCheckedChangeListener'.
Layout XML
Arquivo de Layout:
1 <?xml version="1.0" encoding="utf-8"?>
2 <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:app="http://schemas.android.com/apk/res-auto"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 tools:context=".UD2.UI.CheckBoxes.UD02_02_CkeckBox">
8
9 <CheckBox
10 android:id="@+id/chkbox2_UD02_01_Checkbox"
11 android:layout_width="wrap_content"
12 android:layout_height="wrap_content"
13 android:layout_marginTop="8dp"
14 android:layout_marginEnd="8dp"
15 android:text="CheckBox 2"
16 app:layout_constraintEnd_toEndOf="parent"
17 app:layout_constraintTop_toTopOf="parent" />
18
19 <CheckBox
20 android:id="@+id/chkbox1_UD02_01_Checkbox"
21 android:layout_width="wrap_content"
22 android:layout_height="wrap_content"
23 android:layout_marginStart="8dp"
24 android:layout_marginTop="8dp"
25 android:text="CheckBox 1"
26 app:layout_constraintStart_toStartOf="parent"
27 app:layout_constraintTop_toTopOf="parent" />
28 </android.support.constraint.ConstraintLayout>
Código Java
Activity UD02_02_CkeckBox
1 package cifprodolfoucha.cursoandroid.aprendiendo.UD2.UI.CheckBoxes;
2
3 import android.support.v7.app.AppCompatActivity;
4 import android.os.Bundle;
5 import android.widget.CheckBox;
6 import android.widget.CompoundButton;
7 import android.widget.Toast;
8
9 import cifprodolfoucha.cursoandroid.aprendiendo.R;
10
11 public class UD02_02_CkeckBox extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener {
12
13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_ud02_02__ckeck_box);
17
18 ((CheckBox)findViewById(R.id.chkbox1_UD02_01_Checkbox)).setOnCheckedChangeListener(this);
19 ((CheckBox)findViewById(R.id.chkbox2_UD02_01_Checkbox)).setOnCheckedChangeListener(this);
20 }
21
22 @Override
23 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
24
25 switch (buttonView.getId()){
26
27 case R.id.chkbox1_UD02_01_Checkbox: // Aquí iría o código específico para o primeiro checkbox.
28 if (isChecked){
29 Toast.makeText(this,"Se activou checkbox1" ,Toast.LENGTH_SHORT).show();
30 }
31 else{
32 Toast.makeText(this,"Se desactivou checkbox1" ,Toast.LENGTH_SHORT).show();
33 }
34 break;
35 case R.id.chkbox2_UD02_01_Checkbox:
36 if (isChecked){
37 Toast.makeText(this,"Se activou checkbox2" ,Toast.LENGTH_SHORT).show();
38 }
39 else{
40 Toast.makeText(this,"Se desactivou checkbox2",Toast.LENGTH_SHORT).show();
41 }
42 break;
43
44 }
45
46 }
47 }
-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).