Diferencia entre revisiones de «CheckBox»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 257: Línea 257:
 
:* Engadir novo texto a un existente.
 
:* Engadir novo texto a un existente.
 
:* Modificar propiedades básicas, como cor, tamaño, visibilidade,...
 
:* Modificar propiedades básicas, como cor, tamaño, visibilidade,...
:* Xestionar o evento de Click sobre calquera CheckBox e sabelo facer [https://wiki.cifprodolfoucha.es/index.php?title=PDM_Xesti%C3%B3n_de_Eventos#Xesti.C3.B3n_Eventos:_Empregando_Clases_an.C3.B3nimas empregando interfaces anónimas] ou [https://wiki.cifprodolfoucha.es/index.php?title=PDM_Xesti%C3%B3n_de_Eventos#Xesti.C3.B3n_Eventos:_Implementado_a_interface_na_Activity implementando a interface na Activity].
 
:* Xestionar o evento CheckedChangeListener sobre calquera CheckBox e sabelo facer [https://wiki.cifprodolfoucha.es/index.php?title=PDM_Xesti%C3%B3n_de_Eventos#Xesti.C3.B3n_Eventos:_Empregando_Clases_an.C3.B3nimas empregando interfaces anónimas] ou [https://wiki.cifprodolfoucha.es/index.php?title=PDM_Xesti%C3%B3n_de_Eventos#Xesti.C3.B3n_Eventos:_Implementado_a_interface_na_Activity implementando a interface na Activity].
 
  
 
<syntaxhighlight lang="java" highlight="">
 
<syntaxhighlight lang="java" highlight="">
Línea 266: Línea 264:
  
 
         chk.setText("Novo texto Check");                                                                    // Cambiamos o texto do check
 
         chk.setText("Novo texto Check");                                                                    // Cambiamos o texto do check
 
        chk.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {                      // Asociamos a interface OnCheckedChangeListener
 
            @Override
 
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
 
                Toast.makeText(getApplicationContext(),String.valueOf(b),Toast.LENGTH_LONG).show();        // O parámetro b indica o novo estado do CheckBox
 
            }
 
        });
 
  
 
         chk.setChecked(true);                                                                              // Cambimos o estado de check (on/off) => Lanza o evento anterior por ter o setOnXXX antes
 
         chk.setChecked(true);                                                                              // Cambimos o estado de check (on/off) => Lanza o evento anterior por ter o setOnXXX antes

Revisión del 16:27 15 nov 2020

Introdución

  • Un CheckBox permite ao usuario elixir unha ou máis opcións dentro dun conxunto.

00 checkboxes.png

  • Este control ao igual que ToggleButton e Switch herda da clase CompoundButton, quen, á súa vez, herda da clase Button.

00 Part of Android View Hierarchy.png



  • Por tanto, funcionan da mesma maneira:


  • 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/>


Caso práctico 1

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.


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.



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 }



Métodos mínimos a coñecer no manexo dos CheckBox

  • Referenciar a un CheckBox có método findViewById.
  • Recuperar o contido do texto asociado.
  • Cambiar o contido do texto, podendo empregar recursos gardados en /res/values.
  • Engadir novo texto a un existente.
  • Modificar propiedades básicas, como cor, tamaño, visibilidade,...
        CheckBox chk = findViewById(R.id.chk_Uno);                                                          // Referenciamos a un CheckBox que estea no Layout da Activity

        Toast.makeText(getApplicationContext(),chk.getText() + " " + String.valueOf(chk.isChecked()),Toast.LENGTH_LONG).show();   // Obtemos o texto e estado de check con isChecked()

        chk.setText("Novo texto Check");                                                                    // Cambiamos o texto do check

        chk.setChecked(true);                                                                               // Cambimos o estado de check (on/off) => Lanza o evento anterior por ter o setOnXXX antes




-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2015).