第二章 吸引你的眼球—UI編程(7),第二章ui
2.3 簡單明了的訊息提示框(Toast)和對話方塊(Dialog)2.3.1Toast提示
很多時候,我們需要對使用者提供一些提示資訊。比如,當使用者登入應用程式時,提示使用者“應用程式需要更新”;當使用者在輸入框輸入文本時,提示使用者“最多能輸入30個字元”。這些需求,Toast輕鬆就能搞定!
Toast是Android提供的“快顯訊息”類。Toast使用起來非常簡單,只需要簡單的代碼就能實現。
Toast.makeText(Context context, CharSequence text,int duration).show(); |
這裡有三個參數,第一個為當前的Context;第二個為要顯示的提示資訊;第三個則為提示資訊顯示的時間周期,Toast中有兩個靜態常量LENGTH_LONG和LENGTH_SHORT。當然如果你已經把提示資訊存入了資源檔中,則也可以用以下的代碼來實現。
Toast.makeText(Context context,int resId,int duration).show(); |
其他參數不變,只是第二個參數改成了資源ID。
我們在一個叫ToastActivity的Activity中寫一個簡單的Toast提示來看看它的效果吧。
Toast.makeText(ToastActivity.this, "使用Toast提示", Toast.LENGTH_LONG).show(); |
效果2-20所示:
圖2-20 Toast的使用
2.3.2Dialog提示
Toast的使用無疑是很方便的,但是有些時候,Toast並不能滿足我們的需求。因為可能我們並不僅僅滿足於給使用者提示一些資訊,而是希望給使用者提示一些資訊之後,使用者可以有更多自己的選擇。比如,當使用者點擊“退出”按鈕的時候,我們給使用者提示“是否真的選擇退出”,因為有可能“退出”按鈕是使用者不小心點擊到的,當使用者再點擊“確定”時,則真的退出應用;如果使用者點擊“取消”則返回應用。這樣的話,Toast就不能滿足於這樣的需求了,於是我們的Dialog對話方塊就呼之欲出了。
在Android中,我們要實現對話方塊可以使用AlertDialog.Builder類,也可以自訂對話方塊,下面我們分別通過一個例子來對它們加以說明。
1)使用AlertDialog.Builder類建立對話方塊
在使用這種方式建立對話方塊之前,我們先來瞭解一下AlertDialog.Builder中幾個常用的方法。
setTitile(); // 給對話方塊設定title setIcon(); // 給對話方塊設定表徵圖 setMessage(); // 給對話方塊設定提示資訊 setPositiveButton(); // 給對話方塊添加“YES”按鈕 setNeutralButton(); // 給對話方塊添加“NO”按鈕 |
下面,我們就來建立一個對話方塊,彈出一個標題為“提示資訊”,資訊內容為“確定退出嗎”,並有一個“確定”按鈕和一個“取消”按鈕,並為“確定”按鈕添加事件監聽,代碼如下:
new AlertDialog.Builder(this).setTitle("提示資訊"). setMessage("確定退出嗎"). setPositiveButton("確定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }). setNegativeButton("取消", null). show(); |
下面,我們來看看效果,2-21所示:
圖2-21AlertDialog的使用
雖然我們沒有對“取消”按鈕添加事件監聽,但在這個對話方塊中,當我們點擊“取消”按鈕時,對話方塊一樣會被關閉,這是因為setNegativeButton()預設就會關閉對話方塊。
2)自訂對話方塊
很多時候,我們根據需求需要自己來設計對話方塊。下面,我們也以一個例子來看看自訂對話方塊是如何?的。
首先,我們建立一個布局檔案dialog.xml,並在其中定義好對話方塊:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ImageView android:id="@+id/bg_pic" android:layout_width="260dp" android:layout_height="150dp" android:layout_centerHorizontal="true" android:background="@drawable/dialog_bg"/> <ImageView android:id="@+id/close_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignRight="@id/bg_pic" android:background="@drawable/close"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="自訂Dialog" android:textColor="@android:color/black" android:layout_centerInParent="true"/> </RelativeLayout> |
在這個對話方塊中,我們定義了一個Button,一個TextView。接下來,我們定義一個MyDialog繼承自Dialog。
// import略 public class MyDialog extends Dialog{ private LayoutInflater factory; public MyDialog(Activity act) { super(act); factory = LayoutInflater.from(act); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(factory.inflate(R.layout.dialog, null)); } } |
然後,我們在一個Activity的onCreate方法中來看看效果吧:
new MyDialog(this).show(); |
效果2-22所示:
圖2-22 自訂Dialog的使用
好像並沒有達到我們想要的效果,上面多出來了一塊,而且外面也有邊框,這些都不是我們想要的。這是因為這些都是Dialog預設的格式,如果我們不需要的話,我們需要為它添加我們自己的樣式,我們在values目錄下建立一個styles.xml樣式檔案,輸入內容如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="mydialog" parent="@android:style/Theme.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> </style> </resources> |
在這個樣式當中,第一個屬性我們把Dialog設定為無title;第二個屬性就是把邊框設為透明,然後修改MyDialog的構造方法如下所示:
public MyDialog(Activity act) { super(act,R.style.mydialog); factory = LayoutInflater.from(act); } |
下面,我們再來看看效果,2-23所示:
圖2-23 自訂Dialog中使用樣式
同樣的,我們也可以在MyDialog中監聽Diglog中組件的各種事件進行相應的處理,例如,當點擊“X”表徵圖時關閉該Dialog:
ImageView closeView = (ImageView) findViewById(R.id.close_view); closeView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MyDialog.this.dismiss(); } }); |