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

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

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

1.WebView 網絡視圖android

當一個應用程序想展現一個網頁時,能夠怎麼作呢?本身去作一個瀏覽器是徹底沒有必要的,一種方法是調用系統瀏覽器或第三方瀏覽器加載,須要用到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中打開。具體代碼見下:post

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

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

運行一下程序看看效果:ui

2.Dialog 對話框設計

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

對五個按鈕都註冊監聽事件,每一個對話框一開始都要實例化一個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() 方法,添加上下文菜單就重寫 onCreateContextMenu() 方法。

例如添加一個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

相關文章
相關標籤/搜索