Diferencia entre revisiones de «Toast»

De MediaWiki
Ir a la navegación Ir a la búsqueda
Línea 18: Línea 18:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
*'''Context''': é un interface que permite acceder aos recursos da nosa aplicación
 
*'''Context''': é un interface que permite acceder aos recursos da nosa aplicación
 +
: Para acceder á interface podemos empregar
 +
:*  A palabra 'this' se fai referencia á activity (por exemplo, dentro dunha interface anónima OnClickListener asociadada a un botón, this fai referenza ao botón, non a activiy e non poderíamos empregar esta palabra).
 +
:::<syntaxhighlight lang="xml" enclose="div">
 +
public class MainActivity extends AppCompatActivity {
 +
 +
    private String cadea = "HOLA";
 +
 +
    @Override
 +
    protected void onStart() {
 +
        super.onStart();
 +
 +
        Toast t = Toast.makeText(this,"START",Toast.LENGTH_LONG);
 +
    }
 +
 +
}
 +
</syntaxhighlight>
 +
:* '''Nome da activity.this'''. Por exemplo, dentro dun botón xestioando o evento click:
 +
:::<syntaxhighlight lang="xml" enclose="div" highlight="5">
 +
    Button btn = findViewById(R.id.btnLanzar_Act_Main);
 +
        btn.setOnClickListener(new View.OnClickListener() {
 +
            @Override
 +
            public void onClick(View view) {
 +
                Toast.makeText(MainActivity.this,"PULSADO BOTON",Toast.LENGTH_LONG).show();
 +
 +
            }
 +
        });
 +
</syntaxhighlight>
 +
:* Empregando o método '''getApplicationContext()''', por exemplo:
 +
:::<syntaxhighlight lang="xml" enclose="div" highlight="5">
 +
    Button btn = findViewById(R.id.btnLanzar_Act_Main);
 +
        btn.setOnClickListener(new View.OnClickListener() {
 +
            @Override
 +
            public void onClick(View view) {
 +
                Toast.makeText(getApplicationContext(),"PULSADO BOTON",Toast.LENGTH_LONG).show();
 +
 +
            }
 +
        });
 +
</syntaxhighlight>
 +
 +
 
*'''duration''':
 
*'''duration''':
 
**'''LENGTH_SHORT''': constante que equivale a 2 segundos  
 
**'''LENGTH_SHORT''': constante que equivale a 2 segundos  

Revisión del 15:56 22 oct 2020

Introdución

  • Un Toast proporciona un simple feedback de algo que pasa na aplicación a través dunha pequena mensaxe popup.
  • Chámaselle así "Tostada" porque aparece na pantalla do mesmo xeito que as tostadas saltan na torradora cando están feitas.

00 toast.png

  • So usa o espazo que precise a mensaxe e a pantalla actual permanece visible.
  • Desaparecen automaticamente pasado un pequeno espazo de tempo.


  • Para usar o Toast:
1 Context context = getApplicationContext();
2 CharSequence text = "Hello toast!";
3 int duration = Toast.LENGTH_SHORT;
4 
5 Toast toast = Toast.makeText(context, text, duration);
6 toast.show();
  • Context: é un interface que permite acceder aos recursos da nosa aplicación
Para acceder á interface podemos empregar
  • A palabra 'this' se fai referencia á activity (por exemplo, dentro dunha interface anónima OnClickListener asociadada a un botón, this fai referenza ao botón, non a activiy e non poderíamos empregar esta palabra).
public class MainActivity extends AppCompatActivity {

    private String cadea = "HOLA";

    @Override
    protected void onStart() {
        super.onStart();

        Toast t = Toast.makeText(this,"START",Toast.LENGTH_LONG);
    }

}
  • Nome da activity.this. Por exemplo, dentro dun botón xestioando o evento click:
     Button btn = findViewById(R.id.btnLanzar_Act_Main);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this,"PULSADO BOTON",Toast.LENGTH_LONG).show();

            }
        });
  • Empregando o método getApplicationContext(), por exemplo:
     Button btn = findViewById(R.id.btnLanzar_Act_Main);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(getApplicationContext(),"PULSADO BOTON",Toast.LENGTH_LONG).show();

            }
        });


  • duration:
    • LENGTH_SHORT: constante que equivale a 2 segundos
    • LENGTH_LONG: constante que equivale a 3,5 segundos


  • As liñas 5 e 6 anteriores poden ser substituídas pola seguinte:
1 Toast.makeText(context, text, duration).show();


Caso práctico

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: Toasts.



  • Dentro do paquete Toasts crear unha nova 'Empty Activity' de nome: UD02_01_Toast 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.


  • Collendo como base a primeira versión da aplicación dos planetas: U2_12_Spinner.
  • Simplemente agora a nova aplicación ten unha entrada máis ao principio do Spinner Selecciona un planeta.



Arquivo de recursos: array_planetas.xml

  • Copiamos o ficheiro array_planetas.xml ubicado en /res/values/ dunha aplicación á outra.
  • Engadimos un ítem ao principio:
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3 
 4     <string-array name="planetas_UD02_01_spinner">
 5         <item>Mercurio</item>
 6         <item>Venus</item>
 7         <item>Terra</item>
 8         <item>Marte</item>
 9         <item>Xúpiter</item>
10         <item>Saturno</item>
11         <item>Urano</item>
12         <item>Neptuno</item>
13     </string-array>
14 
15     <string-array name="planetas_UD02_01_toast">
16         <item>Selecciona un planeta</item>
17         <item>Mercurio</item>
18         <item>Venus</item>
19         <item>Terra</item>
20         <item>Marte</item>
21         <item>Xúpiter</item>
22         <item>Saturno</item>
23         <item>Urano</item>
24         <item>Neptuno</item>
25     </string-array>
26 </resources>



O XML do layout

  • É igual ao da aplicación orixinal, cambiando a fonte de datos do spinner e actualizando os id´s dos controis.
 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=".UI.Toasts.UD02_01_Toast">
 8 
 9     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
10         xmlns:tools="http://schemas.android.com/tools"
11         android:layout_width="match_parent"
12         android:layout_height="match_parent"
13         android:orientation="vertical" >
14 
15         <Spinner
16             android:id="@+id/spnPlanetas_UD02_01_Toast"
17             android:layout_width="wrap_content"
18             android:layout_height="wrap_content"
19             android:entries="@array/planetas_UD02_01_toast" />
20 
21         <Button
22             android:id="@+id/btnSeleccion_UD02_01_Toast"
23             android:layout_width="wrap_content"
24             android:layout_height="wrap_content"
25             android:onClick="onButtonClick"
26             android:text="Preme cando selecciones" />
27 
28         <TextView
29             android:id="@+id/tvResultado_UD02_01_Toast"
30             android:layout_width="wrap_content"
31             android:layout_height="wrap_content"
32             android:text="Selecciona un planeta" />
33 
34     </LinearLayout>
35 </android.support.constraint.ConstraintLayout>



Código Java

  • Ao método da aplicación orixinal engadímoslle un control: se esta seleccionada ou non a posición 0 do Spinner.
 1 package es.cursoandroid.cifprodolfoucha.aprendiendo.UI.Toasts;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.Spinner;
 7 import android.widget.TextView;
 8 import android.widget.Toast;
 9 
10 import es.cursoandroid.cifprodolfoucha.aprendiendo.R;
11 
12 public class UD02_01_Toast extends Activity {
13 
14     public void onButtonClick(View v) {
15         Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_Toast);
16         TextView lblResultado = (TextView) findViewById(R.id.tvResultado_UD02_01_Toast);
17 
18         if (spinPlanetas.getSelectedItemId() == 0) {
19             Toast.makeText(this, "Por favor selecciona un planeta",Toast.LENGTH_LONG).show();
20             lblResultado.setText("");
21         } else
22 
23             lblResultado.setText("Seleccionaches "
24                     + spinPlanetas.getSelectedItem()
25                     + "\nque está na posición "
26                     + spinPlanetas.getSelectedItemId());
27     }
28 
29 
30     @Override
31     protected void onCreate(Bundle savedInstanceState) {
32         super.onCreate(savedInstanceState);
33         setContentView(R.layout.activity_ud02_01__toast);
34     }
35 }
  • Liña 18: Comprobamos se a posición seleccionada no Spinner é a 0 de ser así ...
  • Liña 19: realizamos un Toast.
  • Liña 20: Poñemos a etiqueta a baleiro.



Personalizando o Toast

  • O toast é un obxecto da clase Toast que se crea cando chamamos o makeToast.
Unha vez creado podemos acceder as súas propiedades e métodos.
  • Por exemplo:


  • Vexamos un exemplo, baseado no mesmo código do exemplo anterior, no que imos crear un View de tipo TextView que imos asociado a o Toast e tamén imos modificar a posición na que aparece a mensaxe:
PDM toast 4.jpg


  • O código modificado:
 1     public void onButtonClick(View v) {
 2         Spinner spinPlanetas = (Spinner) findViewById(R.id.spnPlanetas_UD02_01_Toast);
 3         TextView lblResultado = (TextView) findViewById(R.id.tvResultado_UD02_01_Toast);
 4 
 5         if (spinPlanetas.getSelectedItemId() == 0) {
 6             Toast toast =  Toast.makeText(this, "",Toast.LENGTH_LONG);   // Creamos o obxecto Toast
 7 
 8             TextView viewToast = new TextView(this);    // Creamos un view que imos asociado ao Toast en vez dunha cadea de texto. Podería ser calquera view
 9             viewToast.setText("Por favor selecciona un planeta");
10             viewToast.setTextColor(Color.RED);
11 
12             toast.setGravity(Gravity.TOP|Gravity.RIGHT,10,10);  // Cambiamos as propiedades do toast
13             toast.setView(viewToast);
14             
15             toast.show();   // Amosamos o toast
16             lblResultado.setText("");
17         } else {
18 
19             lblResultado.setText("Seleccionaches "
20                     + spinPlanetas.getSelectedItem()
21                     + "\nque está na posición "
22                     + spinPlanetas.getSelectedItemId());
23        }
24     }



Empregando cadeas definidas en /res/values/

  • Como xa vimos nos TextViews, as cadeas que se amosan nun Toast non deben ser escritas directamente no código Java, se non que deben ser referenciadas como un recurso de tipo cadea definido nalgún arquivo /res/values


Podedes consultar como facelo no enlace anterior.




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