安卓018 Dialog & Toast & Notification & Menu

來源:互聯網
上載者:User

標籤:


一、  通過 Toast  顯示訊息提示框

Toast 類用於在螢幕中顯示一個可以訊息提示框,該訊息提示框沒有任何控制按鈕,並
且不會獲得焦點,經過一定時間後自動消失,通常用於顯示一些快速提示資訊,應用範圍非
常廣泛
文法:
1, Context context = getApplicationContext();
CharSequence text ="Hello toast!";
int duration =Toast.LENGTH_SHORT;
Toast toast =Toast.makeText(context, text, duration);
toast.show();
Toast toast=new Toast(this);
Toast toast=Toast.makeText(this, "要顯示的內容", Toast.LENGTH_SHORT);
Toast.show();
注意:調用 Toast  類的 show() 方法顯示訊息提示框,需要注意的是,一這要調用該方法,
否則設定的訊息提示框將不會顯示。
常用方法:
方法  描述
setDuration(int duration)  用 於 設 置 消 息 提 示 持 續 的 時 間 , 通 常 使 用
Toast.LENGTH_LONG 或 Toast.LENGTH_SHORT 參數值
setGravity(int gravity,int xOffset,int
yOffset)
用於設定訊息提示框的位置,參數 gravity 用於指定
對齊,xOffset 和 yOffset 用於指定具體的位移值
setMargin(float
horizontalMargin,float
verticalMargin)
用於設定訊息提示的頁面邊界
setText(CharSequence s)  用於設定要顯示的常值內容
setView(View view)  用於設定將要在訊息提示框中顯示的視圖

二、  使用 AlertDialog  實現對話方塊AlertDialog 類的功能非常強大,它不僅可以產生帶按鈕的提示對話方塊,還可以產生帶列
表的列表對話方塊,使用 AlertDialog 可以產生對話方塊概括起來有四種
1, 帶確定,中立和取消三個按鈕的提示對話方塊,其中的按鈕個數不是固定的,可以根據需
要添加。
2, 帶列表的列表對話方塊
3, 帶多個單選清單項目和 N 個按鈕的列表對話方塊
4, 帶多個多挑選清單項和 N 個按鈕的列表對話方塊
常用方法:
方法  描述
setTitle(CharSequence title)  用於為對話方塊設定標題
setIcon(Drawable icon)  用於為對話方塊設定表徵圖
setIcon(int resId)  用於為對話方塊設定表徵圖
setMessage(CharSequence
message)
用於為提示對話方塊設定要顯示的內容
setButton()
用於為提示對話方塊添加按鈕,可以是取消按鈕、中立按
鈕 和 確 定 按 鈕 。 需 要 通 過 為 其 指 定 int 類 型 的
whichButton 參 數 實 現 , 其 參 數 值 可 以 是
DialogInterface.BUTTON_POSITIVE ( 確 定 按 鈕 )、
BUTTON_NEGATIVE(取消按鈕)或者 BUTTON_NEUTRAL
(中立按鈕)
通常情況下,使用 AlertDialog 類只能產生帶 N 個按鈕的提示對話方塊,要產生另外三種列表
的對話方塊,需要使用 AlertDialog.Builder 類,AlertDialog.Builder 類提供常用方法如下:
方法  描述
setTitle(CharSequence title)  用於為對話方塊設定標題
setIcon(Drawable icon)  用於為對話方塊設定表徵圖
setIcon(int resId)  用於為對話方塊設定表徵圖
setMessage(CharSequence
message)
用於為提示對話方塊設定要顯示的內容
setNegativeButton()  用於為對話方塊添加取消按鈕
setPositiveButton()  用於為對話方塊添加確定按鈕
setNeutralButton()  用於為對話方塊添加中立按鈕
setItems()  用於為對話方塊添加清單項目
setSingleChoiceItems()  用於為對話方塊添加單選清單項目
setMultiChoiceItems()  用於為對話方塊添加多選清單項目
setView()  給彈出框設定自訂布局
案例
三、  使用 Notification  在狀態列上顯示通知定義:
一種可以顯示即時資訊的控制項,該控制項顯示在標題列中,拉開後會看到通知的完整樣式
Notification 和 NotificationManager。來處理狀態列的推送資訊,使用它倆發送顯示通
知分四個步驟
調用 getSystemService()方法擷取系統的 NotificationManager 服務
建立一個 Notification 對象,並為其設定種屬性
為 Notification 對象設定事件資訊
通過 NotificationManager 類的 notify()發送 Notification 通知
通過 NotificationManager 的 manager.cancel(NOTIFYID_1);可以清除通知
3.1  普通通知
(1)使用普通通知的必須選項:
①添加標題,使用 setContentTitle()方法
②設定表徵圖,使用 setSmallIcon()方法
③新增內容,使用 setContentText()方法
(2)可選項
①setDefaults(系統預設鈴聲 | 系統預設震動)
②setTicker(設定標題列顯示的內容,一般為 contentText)
(3)建立通知的步驟
①定義 NotificationCompat.Builder 對象
②設定必須選項和可選項
(4)發布通知
NotificationManager.notify(id,notification) .
id→每個通知都有一個唯一的 id
notification→通知對象,而非 NotificationCompat.Builder 對象,通過調用
builder.build()方法得到
(5)點擊事件
①使用 PendingIntent,具體方法如下
getActivity(Context context, int requestCode, Intent intent, int flags)
context:獲得內容物件
requestCode:獲得另外一個 Activity 的返回碼
intent:PendingIntent 需要觸發的事件,比如跳轉 Activity
flags:通知標誌位
②使用 setContentIntent(PendingIntent)將封裝好的 PendingIntent 對
象放入該方法中
Intent intent=new Intent(MainActivity.this,ContentActivity.class);
PendingIntent
pendingIntent=PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
builder.setContentIntent(pendingIntent);
3.2  大視圖通知
注意:4.1 以下的版本不支援大視圖
①先建立一個簡單通知
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
mBuilder.setSmallIcon(R.drawable.alerm);
mBuilder.setContentTitle("Event tracker");
mBuilder.setContentText("Events received");
②使用 NotificationCompat.InboxStyle 對象設定大視圖通知的樣式,代碼如下:
NotificationCompat.InboxStyle inboxStyle =new
NotificationCompat.InboxStyle();
// 設定大視表徵圖題
inboxStyle.SetBigContentTitle("Event tracker details:");
// 為大視圖添加事件內容
for(int i=0; i < 5; i++){
inboxStyle.addLine("details:"+i);
}
③使用 setStyle 方法將 InboxStyle 對象放進去
mBuilder.setStyle(inBoxStyle);
1.NotificationCompat.InboxStyle 收件匣風格:顯示多行文字
2.NotificationCompat.BigPictureStyle 大圖片風格:詳情地區包含一個 256dp 高度的位

3.NotificationCompat.BigTextStyle 大文字風格:顯示一個大的文字塊
3.3  進度條通知
當下載的時候,在通知欄顯示一個進度條的通知
①建立一個普通通知
②開一個線程,在該線程中使用 setProgress(進度值的最大值,當前進度值,false),在 notify
方法即時通知進度條,代碼如下:
mBuilder.setProgress(100, incr,false);
mNotifyManager.notify(0, mBuilder.build());
3.4  自訂通知
①建立一個普通通知
②建立一個自訂布局檔案,尾碼為 xml
③建立一個 RemoteViews 對象,將 xml 布局載入到該對象中,代碼如下:
RemoteViews content = new RemoteViews(getPackageName(), R.layout.item);
④使用 setContent(content)方法,將 RemoteViews 對象載入到普通通知對象中
Notification.Builder builder = new Notification.Builder(this);
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setContentTitle("自訂");
RemoteViews views = new RemoteViews(getPackageName(), R.layout.activity_content);
builder.setContent(views);
manager.notify(1, builder.getNotification());
四、 Menu  菜單的使用定義:當使用者點擊手機 menu 鍵會快顯功能表,菜單在 2.3 系統中最多顯示 6 項,在 4.0 系統中
會根據螢幕的高度決定菜單的項數。
2.3  中
4.0  中
OptionsMenu:
(1) 代碼中:
①重寫 public boolean onCreateOptionsMenu(Menu menu) {....}方法
②建立功能表項目:menu.add(0, 1, 5, "一");
第一個參數為 GroupID,Group 即將功能表項目分組
第二個參數為 ItemID,指的是功能表項目的 id
第三個參數為 order,指定功能表項目的位置順序
第四個參數為 title,指的是功能表項目所顯示的文字
注意:返回值為 true,表示當使用者按下 menu 鍵時會調用系統提供的 menu,為 false 為調用
自訂的菜單。
③監聽器
重寫 onOptionsItemSelected 方法
(2)XML  中:
①xml 檔案位置:res/menu 檔案夾下
②寫法
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/new_game"
android:icon="@drawable/ic_new_game"
android:title="@string/new_game"
android:showAsAction="ifRoom"/>
<item android:id="@+id/help"
android:icon="@drawable/ic_help"
android:title="@string/help"/>
</menu>
a.建立菜單 xml,必須以 menu 為根標籤
b.item 標籤為功能表項目
c.android:id 表示 item 的 id
d.android:icon 表示菜單的表徵圖,4.0 系統僅在 ActionBar 上顯示表徵圖
e.android:title 表示菜單的文字
f.showAsAction 表示是否將 item 顯示在 ActionBar 上, 僅 僅 4.0  系統可以顯示
※子功能表
<?xml version="1.0" encoding="utf-8"?>
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/file"
android:title="@string/file">
<!-- "file" 的子功能表 -->
<menu>
<item android:id="@+id/create_new"
android:title="@string/create_new"/>
<item android:id="@+id/open"
android:title="@string/open"/>
</menu>
</item>
</menu>
注意:item 必須是雙標籤,將 menu 子功能表放到 item 標籤中
③在 Activity 中引入 xml
@Override
publicboolean onCreateOptionsMenu(Menu menu){
MenuInflater inflater = getMenuInflater() ;
inflater.inflate(R.menu.xxx, menu);
returntrue;
}
Context Menu
1.重寫方法:
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.clear();//清除系統的 ContextMenu,主要針對 2.3.x 系統
if (v == findViewById(R.id.editText1)) {
menu.setHeaderIcon(R.drawable.ic_launcher);//為操作功能表添加表徵圖
menu.setHeaderTitle("性別");//為操作功能表添加標題
menu.add(0, 0, 0, "男");//設定功能表項目,同 OptionsMenu
menu.add(0, 1, 0, "女");
}
}
2.點擊事件:
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case 0:
et.setText(item.getTitle());
break;
case 1:
et.setText(item.getTitle());
break;
}
return true;
}
3.註冊:
this.registerForContextMenu(需要顯示 ContextMenu 的控制項);














安卓018 Dialog & Toast & Notification & Menu

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.