piątek, 20 kwietnia 2012

Wyświetlanie okna popup.

Wczoraj zabrałem się za okno popup, które ma się pojawiać pomiędzy poziomami. Będzie zawierało gratulacje, bieżącą punktację, najwyższy wynik w grze, być może również z internetu. Nie powinno być to nic skomplikowanego. Zacząłem od definicji układu next_level.xml:
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/popup_layout"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/header"
        style="@style/textattributes"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:text="@string/nxt_lvl_header" />

    <RelativeLayout 
        android:layout_width="fill_parent" android:layout_height="wrap_content"  
        android:orientation="vertical" >
    <TextView
        style="@style/textattributes"
            android:id="@+id/scoreText"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="@string/scoreTxt" />
    <TextView
        style="@style/textattributes"
            android:id="@+id/scoreVal"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:text="0" 
            android:layout_toRightOf="@id/scoreText" 
            android:layout_marginLeft="3dp"/>
    </RelativeLayout>
    <LinearLayout
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:gravity="bottom|center"
        android:orientation="vertical" >

        <Button
            android:id="@+id/nxt_lvl_dismis"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/dismiss" />
    </LinearLayout>

</LinearLayout> 

Trzeba pamiętać o nadaniu identyfikatora układu - android:id="@+id/popup_layout". Będzie on potrzebny przy tworzeniu okna:

View popup = infl.inflate(R.layout.next_level, 
                (ViewGroup)findViewById(R.id.popup_layout));
pw = new PopupWindow(popup, 300, 470, true);

Teraz bardzo ważna sprawa. Jeżeli nasz popup ma reagować na zdarzenia - kliknięcie przycisku na przykład, to musi mieć tło. Ja chciałem, żeby było prześwitujące:


Bitmap tlo = Bitmap.createBitmap(300, 470, Bitmap.Config.ARGB_8888);
Canvas canvTemp = new Canvas(tlo);
canvTemp.drawColor(Color.parseColor("#D8591385"));
BitmapDrawable drw = new BitmapDrawable(tlo);
pw.setBackgroundDrawable(drw); 

Potem dodam ładne zaokrąglone narożniki. Tło ustawione, teraz można dodać zdarzenia do przycisków i ustawić wartości:

TextView txtScore = (TextView)popup.findViewById(R.id.scoreVal);
txtScore.setText(""+score);
dismissButton.setOnClickListener(new OnClickListener() {
 public void onClick(View v) {
  pw.dismiss();
 }
});

Teraz gdy wszystko gotowe, wyświetlamy okienko:

pw.showAtLocation(popup, Gravity.CENTER, 0, 0);

Co dziwne, w dokumentacji piszą, że metoda dismiss() działa tylko dla okienek uruchomionych za pomocą metody showAsDropdown(), a w pozostałych przypadkach nic nie robi. Jednak okienko się zamyka. Wrócę do tego problemu później. Właściwie to nawet nie jest problem :)

Brak komentarzy:

Prześlij komentarz