學習筆記| AS入門(五) 高級控件篇(下)

以下是今日份的控件清單:

  • WebView 網絡視圖
  • Dialog 對話框
  • Notification 通知
  • Meau 菜單

1.WebView 網絡視圖

當一個應用程序想展示一個網頁時,可以怎麼做呢?自己去做一個瀏覽器是完全沒有必要的,一種方法是調用系統瀏覽器或第三方瀏覽器加載,需要用到Activity篇學過的信使Intent類。Intent不僅可以啓動程序內部的活動,也可以啓動其他程序的活動,所以可以調用其他瀏覽器去幫忙去打開一個網站。具體代碼如下:

這裏首先指定該Intent的action是Intent.ACTION_VIEW,這是一個Android系統內置的動作,其常量值爲android.intent.action.VIEW。然後通過Uri.parse()方法,將一個網址字符串解析成一個Uri對象,再調用Intent的setData()方法將這個Uri對象傳遞進去,最後啓動活動。運行之後:

還有一種方法就是使用系統提供的WebView控件,藉助它可以在應用程序裏嵌入一個瀏覽器,就能加載顯示網頁了。如何做到的呢?一起來學習一下,先在佈局裏放入WebView並鋪滿全屏:

之後在MainActivity裏獲取這個WebView實例並做一系列的設置。用WebView的loadUrl()方法可直接傳入網址;然後調用它的getSettings()方法去設置一些瀏覽器的屬性,這裏只是用setJavascriptEnable(true)讓WebView支持Javascript腳本;接下來需要處理頁面導航,它的作用是在處理一個WebView中的頁面鏈接時,覆蓋系統用默認的瀏覽器打開和加載目標URL的這一行爲,而使之能在WebView中打開。具體代碼見下:

爲了給用戶一個良好的體驗,在WebView加載網頁的過程中加一個ProgressDialog。實現方法是調用它的setWebChromeClient()方法並傳入一個WebChromeClient實例,而需要重寫的onProgressChanged()方法里正好返回當前進度數據newProgress,利用它就可以去做一個實時顯示加載進度的ProgressDialog了。上篇學過了ProgressDialog下面這些代碼肯定非常熟悉了:

最後一定要在配置文件獲取網絡權限。不知你是否發現,在前一種方法調用系統自帶的瀏覽器或第三方瀏覽器是不需要設置網絡權限的,這點要注意。

運行一下程序看看效果:

2.Dialog 對話框

對話框是在當前界面彈出的一個小窗口,可用於顯示重要的提示信息並讓用戶確認信息,比如上一篇講過的DataPickerDialog和TimePickerDialog,也可顯示某種狀態,比如ProgressDialog。一般情況下需要用戶與之交互然後返回到原活動界面。從之前接觸過的Dialog會發現,它需要我們在代碼中直接創建然後show()出來。而不同於學過的Dialog,今天要學習的下圖所展示的這一系列Dialog都是用Builder建立得到的,掌握一個其他就不在話下,在佈局中準備好五個按鈕一起來學習吧。

對五個按鈕都註冊監聽事件,每個對話框一開始都要實例化一個AlertDialog.Builder對象,然後在它身上set各種屬性,有關圖標、標題和內容等設計在之前的學習都有涉及,接下來主要學習每個Dialog獨特的按鈕。一切都設set好之後,用Builder的create()方法就能得到一個Dialog,最後一定要把對話框show()出來。下面分別學習每個Dialog不同的地方:

(1)確認對話框

這裏做一個確認是否退出應用的Dialog,用setPositiveButton()setNegativeButton()方法添加確定和取消按鈕,都用到
DialogInterface下的OnClickListener監聽器,點擊確認就finish()退出應用,否則打印一段Toast。

效果如下:

(2)單選對話框

setSingleChoiceItems()爲單選對話框設置展示的數據、初始選中項(從0計算)以及監聽選項是否被點擊的OnClickListener,上述一一對應所需的三個參數。

效果如下:

(3)多選對話框

多選對話框和單選對話框就非常相似了,不同的是用setMultiChoiceItems()OnMultiChoiceClickListener

(4)列表對話框

列表對話框用setItems()提供數據源和監聽器OnClickListener

效果如下:

(5)自定義對話框

既然是自定義樣式,不妨自定義佈局裏有一張圖片和一段文本吧!如下圖:

在代碼裏首先利用LayoutInflater類將剛剛自定義的佈局動態加載到當前佈局得到一個View,再把這個View用Builder的setView()傳入到對話框佈局裏就可以了。

效果如圖:

3.Notification 通知

Notification是顯示在手機狀態欄的消息,在手機最頂端。將Notification放在控件篇因爲它的創建方法和上面的Dialog有異曲同工之妙,也要利用Builder建立得到,所以索性給一點篇幅來學習如何發送和取消一個通知 。下圖是這個小demo的佈局,有兩個按鈕一個發送一個取消:

首先來看一個通知包含哪些內容:圖標(SmallIcon)、標題(ContextTitle)、內容(ContextText)、時間(When)還有點擊後的響應。那麼下面就實例化一個NotificationCompat.Builder然後set這些屬性吧!

下圖紅框內就是構造一個Notification的過程。除了上面的幾個屬性,爲了更好的告知用戶通知到來還可以設置手機做一些效果,比如震動、有提示聲音還有LED燈亮起。這裏給值DEFAULT_ALL表示以上三個效果都設置。

還有一個關鍵,如何實現點擊響應。這需要用到PendingIntent類,它看起來就和Intent有些相似,它們都是可指明一個意圖並執行一些任務,只不過前者不是立即去做,還是在合適的時間才執行。這裏我們想讓這個通知跳轉到Dialog那個活動界面,所以調用PendingIntent.getActivity()並提供(提供上下文、請求碼、實現頁面跳轉的Intent、被訪問碼)四個參數,就會得到一個PendingIntent實例,再傳入Builder的setContentIntent()裏,跳轉就可以實現了。最後用Builder的build()就能得到一個Notification了。

但還沒結束,Notification自己並不能去發送,需要用由系統提供的管理類NotificationManager去完成發送和取消通知的事情,它有兩個方法,發送通知notify(被髮送通知的id,通知對象)和取消發送cancel(被取消發送的通知id)。獲取一個NotificationManager對象方法見下圖:

當用戶點擊通知頁面跳轉後,就可以將系統狀態欄上的通知取消了。在跳轉後的活動裏同樣調用NotificationManager的cancel()方法就可以了。到此整個需求就實現了。

最後一定注意手機震動需要權限。

運行程序,下圖展示了一個Notification從發出到被點擊到取消的整個過程:

4.Meau 菜單

菜單是許多應用程序不可或缺的一部分,這裏主要介紹下面三種菜單。

1) 選項菜單 OptionsMenu:android中最常規的菜單,每個Activity只有一個選項菜單。
2) 子菜單SubMenu:android中點擊子菜單將彈出懸浮窗口顯示子菜單項,用於把功能相近的菜單分組顯示。
3) 上下文菜單ContextMenu:android中長按視圖控件後出現的菜單,每個View都可有一個上下文菜單,一般常用於ListView和GridView。

(1)菜單的創建
創建一張菜單有兩種方法,第一種通過加載xml文件的菜單項。但是菜單的佈局文件並不是在res->layout文件夾下,而要在res下新建名爲menu的文件夾,這裏纔是菜單xml文件的容身之地。詳細步驟見圖:

之後就可以根據需求在佈局文件裏添加菜單項Item,並指定每個Item的id和title。三種菜單的佈局和樣式效果如下圖:

有了佈局,就可以在需要菜單的Activity裏重寫方法 onCreate某某某()並加入一行代碼getMenuInflater().inflate(需要添加的菜單佈局,menu)就可以了。對應關係是:添加選項菜單或子菜單就重寫onCreateOptionsMenu()方法,添加上下文菜單就重寫onCreateOptionsMenu()方法。

例如添加一個ContextMenu:

第二種方法是直接在被重寫的方法裏用代碼動態添加,方法是menu.add()並提供四個參數(groupId,itemId,order,title), 其中itemId和title對應了xml中Item的id和title,groupId用來分組的Id,order是菜單項用來排序的。menu還可以set菜單其他屬性,如圖標、標題,在後面代碼中有展示。

三種菜單兩種添加方式的代碼如下圖所示:

這裏強調一點,因爲ContextMenu對應的是每個View,這裏以ListView爲例,所以一定要給ListView註冊上ContextMenu。代碼見下:

(2)菜單項的監聽

當然每個菜單項可以設置點擊響應事件,事件會返回參數菜單項item,再利用item.getGroupId()item.getItemId()就能判斷被點擊菜單項並設置相應的動作了。

例如在SubMenu設置點擊事件方法:

點擊效果:

下表展示三種菜單各自對應方法。

至此高級控件篇就告一段落了,Android還提供很多控件,我們也可以按照自己的需求自定義控件,這些內容在將來學習中繼續慢慢探索吧!

> 下一篇內容:碎片Fragment

發佈了51 篇原創文章 · 獲贊 33 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章