2013/11/19

Jakinarazpen iragankorrak - Toast mezuak

Androiden modu ugari daude erabiltzaileari abixu edota jakinarazpen bat pasatzeko. Horien artean oso erabilgarriak dira bistaratzen den activity-ari fokua guztiz kendu gabe segundu batzuetan pantailan mantentzen diren mezuak (Ikus I. Ilustrazioa): Toast-ak.

I. Ilustrazioa: Toast mezu bat

Jakinarazpen mota hauek erabiltzaileari mezu sinple eta azkar bat emateko erabiltzen dira eta ez dute erabiltzailearen elkarrekintzarik eskatzen, hau da, automatikoki desagertzen dira.

I. ilustrazioan ikusten den moduan defektuz guk ezer definitzen ez badugu Toast mezuak behaldean eta zentraturik agertzen dira. Honako adibide honetan berriz, pantailaren erdialdean eta 0,0 posizioan hau da, ezkerraldean agertuko da:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Toast toast = Toast.makeText(getApplicationContext(),
                        "Toast con gravity", Toast.LENGTH_SHORT);
     
        toast.setGravity(Gravity.CENTER|Gravity.LEFT,0,0);
     
        toast.show();
    }

App honek onCreate-tik pasatzen denean Toast bat bidaliko du pantailara. Kasu honetan iraupen motzekoa, Toast.LENGTH_SHORT adierazi baitzaio. setGravity metodoaren parametroekin jolastuz pantailan nahi dugun tokian koka daiteke Toast-a. Defektuzko tokia baliagarria bada, lerro hori kendu besterik ez da egin behar.
II. Ilustrazioa: Toast bat gravity-arekin
Androidek Toast-ak pertsonalizatzeko aukera eskeintzen du, horretarako xml fitxategi batean Toast-ak izango duen itxura definitzen da (adibidez toasta.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/Layouta"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="horizontal"
  android:background="#666666"
  android:padding="4dip" >
 
    <ImageView android:id="@+id/Ikonoa"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:src="@drawable/ikonoa" />
 
    <TextView android:id="@+id/Mezua"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:textColor="#FFFFFF"
        android:paddingLeft="8dip" />
 
</LinearLayout>

Ondoren honako logika hau aplikatzen diogu App-ari. Kasu honetan ere onCreatetik pasatzerakoan bidaliko da Toast-a eta Layout-a edo toast-arentzat diseinaturiko xml bista inflater baten bidez aktibatuko da ondoren toastari atxikitzeko. Sekuentzia honakoa da: lehenengo Toast eta LayoutInflater objektuak sortzen dira; ondoren LayoutInflater-ari sortutako bistaren ( toasta.xml) layout-a (Layouta) atxikitzen zaio eta View motako objektu bati esleitzen zaio; jarraian testua kokatua behar den TextView-aren erreferentzia hartzen da eta "Toast pertsonalizatua" testua aplikatzen zaio eta azkenik, View motako objektua Toast objektuari esleitzen zaio azken hau show metodoaren bitartez bistaratzeko.

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast toast3 = new Toast(getApplicationContext());
        
        LayoutInflater inflater = getLayoutInflater();
        View layout = inflater.inflate(R.layout.toasta,
                        (ViewGroup) findViewById(R.id.Layouta));
 
        TextView txtMsg = (TextView)layout.findViewById(R.id.Mezua);
        txtMsg.setText("Toast Pertsonalizatua");
 
        toast3.setDuration(Toast.LENGTH_SHORT);
        toast3.setView(layout);
        toast3.show();
    }

III. Ilustrazioan ikus daitek sortu berri dugun Toast pertsonalizatuaren emaitza.

III. Ilustrazioa: Toast pertsonalizatua