1. 程式人生 > >Android ActionBar的基本用法(轉自bigconvience)

Android ActionBar的基本用法(轉自bigconvience)

1、ActionBar的簡介
ActionBar位於Activity的頂部,可用來顯示activity的標題、Icon、Actions和一些用於互動的View。它也可被用於應用的導航。
ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有兩種選擇:使用http://actionbarsherlock.com 或使用Support Library v7。
下面是一張使用ActionBar的介面截圖:

其中,[1]是ActionBar的圖示,[2]是兩個action按鈕,[3]是overflow按鈕

2、使用ActionBar

開發API11以下的程式,首先必須在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子類,否則將無法使用ActionBar。

2.1 建立Actions

Actions即ActionBar中的每個互動項,可以在程式碼中建立Action,也可以在XML檔案中指定(位於res/menu)。在menu資原始檔中定義Action的方法如下:

  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.     <item  
  3.         android:id="@+id/action_refresh"
  4.         android:orderInCategory="100"
  5.         android:showAsAction="always"
  6.         android:icon="@drawable/ic_action_refresh"
  7.         android:title="Refresh"/>  
  8.     <item  
  9.         android:id="@+id/action_settings"
  10.         android:title="Settings">  
  11.     </item>  
  12. </menu>   
showAsAction屬性用來定義每個Action是如何顯示的,always表示
永遠顯示在ActionBar中,如果螢幕空間不夠則無法顯示,ifRoom表示螢幕空間夠的情況下顯示在ActionBar中,不夠的話就顯示在overflow中,never則表示永遠顯示在overflow中。
在Activity中建立ctionBar的Action程式碼位於onCreateOptionsMenu()中,下面一段程式碼展示了建立過程:
  1. @Override
  2.   publicboolean onCreateOptionsMenu(Menu menu) {  
  3.     MenuInflater inflater = getMenuInflater();  
  4.     inflater.inflate(R.menu.mainmenu, menu);  
  5.     returntrue;  
  6.   }   
2.2 Action的按鈕互動

如果一個Action被單擊,對於activity中的onOptionsItemSelected()將被呼叫。該函式的傳入引數是一個MenuItem。通過判斷該MenuItem的Id,即可確認是哪個Action被單擊。下面程式碼展示了該函式的使用過程。

  1. Override  
  2.   publicboolean onOptionsItemSelected(MenuItem item) {  
  3.     switch (item.getItemId()) {  
  4.     // action with ID action_refresh was selected
  5.     case R.id.action_refresh:  
  6.       Toast.makeText(this"Refresh selected", Toast.LENGTH_SHORT)  
  7.           .show();  
  8.       break;  
  9.     // action with ID action_settings was selected
  10.     case R.id.action_settings:  
  11.       Toast.makeText(this"Settings selected", Toast.LENG  
  12.           .show();  
  13.       break;  
  14.     default:  
  15.       break;  
  16.     }  
  17.     returntrue;  
  18.   }   

onCreateOptionsMenu()只會被呼叫一次。若想改變Menu,可以呼叫invalidateOptionsMenu(),這會使onCreateOptionsMenu()將會再次被呼叫。
3. 自定義ActionBar
3.1 改變ActionBar的顯示
在執行時顯示和隱藏ActionBar的方法如下:
  1. ActionBar actionBar = getActionBar();  
  2. actionBar.hide();  
  3. // more stuff here...
  4. actionBar.show();   
可以改變顯示在程式圖示旁邊的文字,如下所示:
  1. ActionBar actionBar = getActionBar();  
  2. actionBar.setSubtitle("mytest");  
  3. actionBar.setTitle("vogella.com");   
3.2 隱藏導航按鈕
可以使用如下程式碼隱藏導航按鈕。
  1. getWindow().  
  2.   getDecorView().  
  3.   setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);   
3.3 使用全屏模式
對於Android 4.4 (API 19)應用程式可以使用全屏模式,如下面程式碼所示。
  1. // This method hides the system bars and resize the content
  2.   privatevoid hideSystemUI() {  
  3.     getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  
  4.             | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
  5.             | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
  6.             // remove the following flag for version < API 19
  7.             | View.SYSTEM_UI_FLAG_IMMERSIVE);   
  8.   }   
3.4 使用Split action bar
在螢幕很窄時(如在portra模式),使用Split action bar可以將所有的action顯示在螢幕底部,這樣可以講更有意義的元素如導航、標題等顯示在activity的頂部
啟用split action bar可在 AndroidManifest.xml中定義android:uiOptions="SplitActionBarWhenNarrow"
4. 在Fragment中給action bar新增action
在onCreate()中呼叫 setHasOptionsMenu(true)。Android Framework會呼叫Fragement中的onCreateOptionsMenu()來向Activity的Menu中新增item。

5. 動態設定action bar
5.1. 自定義action bar中顯示的View
可以往action bar中新增自定義的View,如button或text。
可以使用ActionView的setCustomView,然後使用setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM)來Enable自定義View。
例子:先定義一個包含了EditText的佈局檔案。

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <EditText xmlns:android="http://schemas.android.com/apk/res/android"
  3.     android:id="@+id/searchfield"
  4.     android:layout_width="match_parent"
  5.     android:layout_height="match_parent"
  6.     android:inputType="textFilter" >  
  7. </EditText>   
下面的程式碼將上述佈局檔案新增到了一個Activity的action bar中。
  1. package com.vogella.android.actionbar.customviews;  
  2. import android.app.ActionBar;  
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.KeyEvent;  
  6. import android.widget.EditText;  
  7. import android.widget.TextView;  
  8. import android.widget.TextView.OnEditorActionListener;  
  9. import android.widget.Toast;  
  10. public class MainActivity extends Activity {  
  11.   @Override  
  12.   protected void onCreate(Bundle savedInstanceState) {  
  13.     super.onCreate(savedInstanceState);  
  14.     setContentView(R.layout.activity_main);  
  15.     ActionBar actionBar = getActionBar();  
  16.     // add the custom view to the action bar  
  17.     actionBar.setCustomView(R.layout.actionbar_view);  
  18.     EditText search = (EditText) actionBar.getCustomView().findViewById(R.id.searchfield);  
  19.     search.setOnEditorActionListener(new OnEditorActionListener() {  
  20.       @Override  
  21.       public boolean onEditorAction(TextView v, int actionId,  
  22.           KeyEvent event) {  
  23.         Toast.makeText(MainActivity.this, "Search triggered",  
  24.             Toast.LENGTH_LONG).show();  
  25.         return false;  
  26.       }  
  27.     });  
  28.     actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM  
  29.         | ActionBar.DISPLAY_SHOW_HOME);  
  30.   }  
  31. }   
完整的原始碼下載位置:自定義Android Action Bar的佈局

5.2. Action View
Action View控制元件可以替換Action bar的Action按鈕圖示。可以利用這個特點將某個Action項替換成一個ProgressBar。可通過android:actionLayout或android:actionViewClass來定義一個佈局檔案或Widg來作為Action的action view。
Action View使用的效果圖如下。




首先是兩個佈局檔案,第一個用於action view

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
  3.         android:id="@+id/progressBar2"
  4.         android:layout_width="wrap_content"
  5.         android:layout_height="wrap_content">  
  6. </ProgressBar>   
第二個用於menu設定
  1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  2.     <item  
  3.         android:id="@+id/menu_settings"
  4.         android:orderInCategory="100"
  5. 相關推薦

    Android ActionBar基本用法(bigconvience)

    1、ActionBar的簡介 ActionBar位於Activity的頂部,可用來顯示activity的標題、Icon、Actions和一些用於互動的View。它也可被用於應用的導航。 ActionBar 是在Android 3.0(API 11)中加入到SK中的

    黃聰:ffmpeg基本用法()

    sca wid cal ner aspect mp4 動態文本 tegra 控制輸出 FFmpeg FFmpeg 基本用法 本課要解決的問題 1.FFmpeg的轉碼流程是什麽? 2.常見的視頻格式包含哪些內容嗎? 3.如何把這些內容從視頻文件中抽取出來? 4.如

    Android ContentProvider基本用法

    truct 數據共享 implement notify username 資源 per mime類型 exc 轉自:https://www.jianshu.com/p/601086916c8f 一、基本概念 ContentProvider是Android系統中提

    正則表示式matcher.group用法--winter8

    正則表示式matcher.group用法 部落格分類:  演算法   本貼來自       http://hi.baidu.com/cnjsp/blog/item/f5449d824c5102

    Android基本元件和定義檢視

    Android的基本元件 1 Activity 1.1 Activity代表手機的一個螢幕 1.2 一個Android程式由多個Activity組成,即:一個Android程式由多屏內容組成 1.3 Activity相當於一個展板

    netstat常見基本用法(

    查看 我們 一個 端口 png root -a 等待 數據 netstat 簡介 Netstat 是一款命令行工具,可用於列出系統上所有的網絡套接字連接情況,包括 tcp, udp 以及 unix 套接字,另外它還能列出處於監聽狀態(即等待接入請求)的套接字。如果你想確認系

    ffmpeg基本用法()

    FFmpeg FFmpeg 基本用法 本課要解決的問題 1.FFmpeg的轉碼流程是什麼? 2.常見的視訊格式包含哪些內容嗎? 3.如何把這些內容從視訊檔案中抽取出來? 4.如何從一種格式轉換為另一種格式? 5.如何放大和縮小視訊? 6.如何旋轉,翻轉,填充,裁剪,模糊,銳化視訊? 7.如何給視訊加logo

    Android Study之跳啟動管理頁

    LZ-Says:話說現在流氓軟體多不勝數,在反感的同時,我們確實應該從技術的角度去分析,為什麼他們能夠做到所謂的流氓呢?技術不分錯對,關鍵在於使用技術的人去如何運用相關技術~ 前言 話說,最近專案要求軟體自啟動,腦子一想,靜態註冊廣播,監聽使用者

    Android startActivityForResult基本用法

    startActivityForResult和startActivity的區別是一個是帶值傳輸,一個是直接跳轉 具體用法如下: activity_main: <RelativeLayout xm

    Android ActionBar基本用法

    1、ActionBar的簡介 ActionBar位於Activity的頂部,可用來顯示activity的標題、Icon、Actions和一些用於互動的View。它也可被用於應用的導航。 ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低

    Android屬性動畫完全解析(上),初識屬性動畫的基本用法

    fcm 操作 fad 擴展性 改變 內部使用 如果 轉載 @override 轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/43536355 在手機上去實現一些動畫效果算是件比較炫酷的事情,因此Andr

    Notification的基本用法以及使用RemoteView實現定義布局

    解決 edi ngs 取消 ets lsp 過程 net tde Notification的作用 Notification是一種全局效果的通知,在系統的通知欄中顯示。既然作為通知,其基本作用有: 顯示接收到短消息、即時信息等 顯示客戶端的推送(廣告、優惠、新聞等)

    java中正則表達式基本用法

    code ack acea print 表達式 劃線 跟著 以及 n) https://www.cnblogs.com/xhj123/p/6032683.html 正則表達式是一種可以用於模式匹配和替換的規範,一個正則表達式就是由普通的字符(例如字符a到z)以及特殊字符(元

    ()Linux中顯示空閑內存空間的free命令的基本用法

    內存統計 bsp 包括 -o body 說明 swa 大於 art 這篇文章主要介紹了Linux系統中free命令的基本用法,用free命令查看內存空余信息是Linux系統入門學習中的基礎知識,需要的朋友可以參考下 free 命令顯示系統使用和空閑的內存情況,包

    老羅 Android應用程式資源的編譯和打包過程分析

    原文地址   http://blog.csdn.net/luoshengyang/article/details/8744683 轉載自老羅,轉載請說明   我們知道,在一個APK檔案中,除了有程式碼檔案之外,還有很多資原始檔。這些資原始檔是通過An

    老羅 Android應用程式資源管理器(Asset Manager)的建立過程分析

    原文地址在 http://blog.csdn.net/luoshengyang/article/details/8791064 原創老羅,轉載請說明     在前面一篇文章中,我們分析了Android應用程式資源的編譯和打包過程,最終得到的應用程式資源就與

    Android 外部啟動activity,定義action,action常量大全

    https://www.cnblogs.com/guop/p/5067342.html Android 外部啟動activity,自定義action,action常量大全 從任意app,啟動另外一個app的activity: 1.   Intent i =

    https://www.cnblogs.com/android-blogs/p/5818875.html

    JAVA相關基礎知識   1、面向物件的特徵有哪些方面   1.抽象:   抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過

    android AndoridManifest.xml 一些基本用法

    AndoridManifest.xml 是一個xml 具體是什麼東西 百度比我解釋的好 我這邊只是一些常用的用法 首先上下程式碼 在這裡插入程式碼片 <application android:allowBackup="true"

    Android 操作SQLite基本用法

    一.SQLite的介紹 1.SQLite簡介 SQLite是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入  式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援 Window