第二章 吸引你的眼球—UI編程(7),第二章ui

來源:互聯網
上載者:User

第二章 吸引你的眼球—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();

    }

});

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.