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


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

做者:webabcd android

介紹 web

在 Android 中種對話框及各類通知效果的應用 經常使用對話框的使用,彈出式對話框、日期選擇對話框、時間選擇對話框、進度條對 話框   通知(出如今通知列表)和提示性通知(Toast)的演示 一、經常使用對話框的演示 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;         }     } } 二、各類提示效果的演示 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 [源碼下載]
相關文章
相關標籤/搜索