Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 系出名門Android(3) - 對話框(Dialog)和通知(Notification)

系出名門Android(3) - 對話框(Dialog)和通知(Notification)

編輯:Android開發實例

介紹
在 Android 中種對話框及各種通知效果的應用

  • 常用對話框的使用,彈出式對話框、日期選擇對話框、時間選擇對話框、進度條對話框  
  • 通知(出現在通知列表)和提示性通知(Toast)的演示



1、常用對話框的演示
res/layout/main.xml
 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <TextView android:id="@ id/txtMsg" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></TextView>
        
    <Button android:id="@ id/btn1" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn2" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn3" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn4" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn5" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn6" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
        
</LinearLayout>


res/layout/view.xml
 

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <TextView android:text="我是一個 View"
        android:layout_width="wrap_content" android:layout_height="wrap_content">
    </TextView>
    
</LinearLayout>


res/values/array.xml
 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--
        定義一個名為 ary 的 string 類型的數組
    -->
    <string-array name="ary">
        <item>項目 1</item>
        <item>項目 2</item>
    </string-array>
</resources>


Main.java
 

  package com.webabcd.dialog;

import java.util.Calendar;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.app.TimePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Button;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 彈出式對話框的 Demo。先調用 Builder(),在 Create(), 需要顯示對話框的是後再調用 show()
        AlertDialog dialog = new AlertDialog.Builder(this).setTitle("彈出對話框").create();
        dialog.show();
        
        // 以下是各種對話框的 Demo
        MyButtonClickListener listener = new MyButtonClickListener();
        Button btn1 = (Button) this.findViewById(R.id.btn1);
        btn1.setText("簡單的對話框的 Demo");
        btn1.setOnClickListener(listener);

        Button btn2 = (Button) this.findViewById(R.id.btn2);
        btn2.setText("包括常用設置的對話框(數據來自 xml)");
        btn2.setOnClickListener(listener);

        Button btn3 = (Button) this.findViewById(R.id.btn3);
        btn3.setText("彈出的對話框的內容是一個 View");
        btn3.setOnClickListener(listener);

        Button btn4 = (Button) this.findViewById(R.id.btn4);
        btn4.setText("日期選擇對話框");
        btn4.setOnClickListener(listener);

        Button btn5 = (Button) this.findViewById(R.id.btn5);
        btn5.setText("時間選擇對話框");
        btn5.setOnClickListener(listener);

        Button btn6 = (Button) this.findViewById(R.id.btn6);
        btn6.setText("進度條對話框");
        btn6.setOnClickListener(listener);
    }

    class MyButtonClickListener implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            
            // 具體的對話框的實現可以通過重寫 onCreateDialog 完成
            
            switch (v.getId()) {
            case R.id.btn1:
                Main.this.showDialog(0);
                break;
            case R.id.btn2:
                Main.this.showDialog(1);
                break;
            case R.id.btn3:
                Main.this.showDialog(2);
                break;
            case R.id.btn4:
                Main.this.showDialog(3);
                break;
            case R.id.btn5:
                Main.this.showDialog(4);
                break;
            case R.id.btn6:
                Main.this.showDialog(5);
                break;
            }
        }
    }

    @Override
    public Dialog onCreateDialog(int id) {
        switch (id) {

        case 0:
            // 一個簡單的彈出對話框
            return new AlertDialog.Builder(this).setTitle("這是一個簡單的彈出對話框的 Demo")
                    .create();

        case 1:
            // 一個相對復雜的彈出對話框
            return new AlertDialog.Builder(this)
                    .setTitle("標題") // 設置標題
                    // .setCustomTitle(View) // 以一個 View 作為標題 
                    .setIcon(R.drawable.icon01) // 設置標題圖片
                    // .setMessage("信息") // 需要顯示的彈出內容
                    .setPositiveButton("確定", new OnClickListener() { // 設置彈框的確認按鈕所顯示的文本,以及單擊按鈕後的響應行為
                        @Override
                        public void onClick(DialogInterface a0, int a1) {
                            TextView txtMsg = (TextView) Main.this.findViewById(R.id.txtMsg);
                            txtMsg.append("單擊了對話框上的“確認”按鈕\n");
                        }
                    })
                    .setItems(R.array.ary, new DialogInterface.OnClickListener() { // 彈框所顯示的內容來自一個數組。數組中的數據會一行一行地依次排列
                        public void onClick(DialogInterface dialog,    int which) {
                        }
                    })
                    // 其他常用方法如下
                    // .setMultiChoiceItems(arg0, arg1, arg2)
                    // .setSingleChoiceItems(arg0, arg1, arg2)
                    // .setNeutralButton(arg0, arg1)
                    // .setNegativeButton(arg0, arg1)
                    .create();

        case 2:
            // 彈出對話框為指定的 View 的 Demo
            return new AlertDialog.Builder(this).setTitle("此對話框的內容是一個 View")
                    .setView(this.findViewById(R.layout.view)).create();

        case 3:
            // 彈出日期選擇對話框
            Calendar c = Calendar.getInstance();
            return new DatePickerDialog(this, new OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    TextView txtMsg = (TextView) Main.this.findViewById(R.id.txtMsg);
                    txtMsg.append("新設置的日期為:"   String.valueOf(year)   "-"
                              String.valueOf(monthOfYear)   "-"
                              String.valueOf(dayOfMonth)   "\n");
                }
            }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE));

        case 4:
            // 彈出時間選擇對話框
            Calendar c2 = Calendar.getInstance();
            return new TimePickerDialog(this, new OnTimeSetListener() {
                @Override
                public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                    TextView txtMsg = (TextView) Main.this.findViewById(R.id.txtMsg);
                    txtMsg.append("新設置的時間為:" 
                              String.valueOf(hourOfDay)   ":"
                              String.valueOf(minute)   "\n");
                }

            }, c2.get(Calendar.HOUR), c2.get(Calendar.MINUTE), true);

        case 5:
            // 彈出進度條對話框
            ProgressDialog progress = new ProgressDialog(this);
            progress.setMessage("loading...");
            return progress;

        default:
            return null;
        }
    }
}



2、各種提示效果的演示
res/layout/main.xml
 

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <Button android:id="@ id/btn1" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn2" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn3" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
    <Button android:id="@ id/btn4" android:layout_width="wrap_content"
        android:layout_height="wrap_content"></Button>
        
</LinearLayout>


res/layout/view.xml
 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    
    <TextView android:id="@ id/txtMsg" android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </TextView>
        
</LinearLayout>


Main.java
 

  package com.webabcd.notification;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // 通過 Tost.makeText().show() 來實現提示性的通知效果
        // 短時間的提示性通知的 Demo
        Button btn1 = (Button) this.findViewById(R.id.btn1);
        btn1.setText("短時間提示");
        btn1.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(Main.this, "我是短時間提示", Toast.LENGTH_SHORT).show();
            }
        });

        // 長時間的提示性通知的 Demo
        Button btn2 = (Button) this.findViewById(R.id.btn2);
        btn2.setText("長時間提示");
        btn2.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                Toast.makeText(Main.this, "我是長時間提示", Toast.LENGTH_LONG).show();
            }
        });

        // 以一個 View 作為提示性通知的 Demo
        Button btn3 = (Button) this.findViewById(R.id.btn3);
        btn3.setText("以一個 View 做提示");
        btn3.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                View view = inflateView(R.layout.view);
                TextView txtMsg = (TextView) view.findViewById(R.id.txtMsg);
                txtMsg.setText("提示內容");

                Toast toast = new Toast(Main.this);
                toast.setView(view);
                toast.setDuration(Toast.LENGTH_LONG);
                toast.show();
            }
        });

        
        Button btn4 = (Button) this.findViewById(R.id.btn4);
        btn4.setText("發出一個通知(Notification)");
        btn4.setOnClickListener(new Button.OnClickListener() {
            public void onClick(View v) {
                // 實例化通知管理器
                NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

                // 指定單擊通知後所打開的詳細的通知頁面(單擊通知後打開 NotificationView)
                PendingIntent contentIntent = PendingIntent.getActivity(
                        Main.this, 0, new Intent(Main.this,    NotificationView.class), 0);

                // 實例化一個通知,並指定其圖標和標題(在提示欄上顯示)
                Notification n = new Notification(R.drawable.icon01, "我是滾動的通知信息我是滾動的通知信息我是滾動的通知信息", System.currentTimeMillis());
                
                // 設置通知的發送人和通知的詳細內容(打開提示欄後在通知列表中顯示)
                n.setLatestEventInfo(Main.this, "通知發送人", "我是詳細的通知信息我是詳細的通知信息我是詳細的通知信息", contentIntent);

                // 100 毫秒延遲後,震動 250 毫秒,暫停 100 毫秒後,再震動 500 毫秒
                n.vibrate = new long[] { 100, 250, 100, 500 };
                
                // 發出通知(其中第一個參數為通知標識符)
                nm.notify(0, n);
            }
        });
    }

    // 將指定的 xml 資源轉換為一個 View
    private View inflateView(int resource) {
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        return vi.inflate(resource, null);
    }

    // 打開詳細通知頁後此 Activity 會被 Pause,從詳細通知頁返回後此 Activity 會被 Resume
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        
        Log.d("MyDebug", "onPause");
    }
    
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        
        Log.d("MyDebug", "onResume");
    }
}


NotificationView.java
 

  package com.webabcd.notification;

import android.app.Activity;
import android.app.NotificationManager;
import android.os.Bundle;
import android.widget.TextView;

// 單擊通知列表的某個通知後,所打開的詳細的通知頁
public class NotificationView extends Activity {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view);

        TextView txtMsg = (TextView)this.findViewById(R.id.txtMsg);
        txtMsg.setText("點通知之後所鏈接到的 Activity");
        
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        // 取消顯示在通知列表中的指定通知(參數為通知標識符)
        nm.cancel(0);
        
        // 需要關閉此 Activity 的話就 finish 它既可
        // this.finish();
    }
}



OK
[源碼下載]

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved