Android 4 學習(20):ActionBar
參考《Pro Android 4.0》
ActionBar
11.0之後,ActionBar在Activity中預設存在,可以在程式碼中設定其顯示與否:
ActionBar actionBar = getActionBar(); // Hide the Action Bar actionBar.hide(); // Show the Action Bar actionBar.show();
也可以在Manifest中設定是否顯示ActionBar:
<activity android:name=”.MyNonActionBarActivity” android:theme=”@android:style/Theme.Holo.NoActionBar”>
建立一個不顯示ActionBar的Theme:
<?xml version=”1.0” encoding=”utf-8”?>
<resources> <style name=”NoActionBar” parent=”@style/ActivityTheme”>
<item name=”android:windowActionBar”>false</item> </style>
</resources>
ActionBar的其他設定:
ActionBar actionBar = getActionBar(); actionBar.setDisplayShowTitleEnabled(false); actionBar.setDisplayUseLogoEnabled(displayLogo); actionBar.setDisplayShowHomeEnabled(false); actionBar.setSubtitle(“Inbox”); actionBar.setTitle(“Label:important”); Resources r= getResources();Drawable myDrawable = r.getDrawable(R.drawable.gradient_header); actionBar.setBackgroundDrawable(myDrawable); //ActionBar float above content @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); setContentView(R.layout.main); }
使用ActionBar做導航
新建一個Tab:
Tab tabOne = actionBar.newTab(); tabOne.setText(“First Tab”).setIcon(R.drawable.ic_launcher).setContentDescription(“Tab the First”).setTabListener( new TabListener<MyFragment>(this, R.id.fragmentContainer, MyFragment.class)); actionBar.addTab(tabOne);
實現TabListener介面:
public static class TabListener<T extends Fragment> implements ActionBar.TabListener { private MyFragment fragment; private Activity activity; private Class<T> fragmentClass; private int fragmentContainer;
public TabListener(Activity activity, int fragmentContainer, Class<T> fragmentClass) { this.activity = activity;
this.fragmentContainer = fragmentContainer;
this.fragmentClass = fragmentClass; } // Called when a new tab has been selected
public void onTabSelected(Tab tab, FragmentTransaction ft) { if (fragment == null) {
String fragmentName = fragmentClass.getName();
fragment = (MyFragment)Fragment.instantiate(activity, fragmentName);
ft.add(fragmentContainer, fragment, null);
fragment.setFragmentText(tab.getText()); } else {
ft.attach(fragment); }
} // Called on the currently selected tab when a different tag is selected.
public void onTabUnselected(Tab tab, FragmentTransaction ft) { if (fragment != null) {
ft.detach(fragment); }
}
// Called when the selected tab is selected.public void onTabReselected(Tab tab, FragmentTransaction ft) { // TODO React to a selected tab being selected again. } }
將TabListener與Tab繫結在一起:
Tab tabOne = actionBar.newTab(); TabListener<EarthquakeListFragment> listTabListener = new TabListener<EarthquakeListFragment>(this, R.id.EarthquakeFragmentContainer, EarthquakeListFragment.class); tabOne.setTabListener(listTabListener);
使用下拉框導航:
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); ArrayList<CharSequence> al = new ArrayList<CharSequence>(); al.add(“Item 1”);al.add(“Item 2”); ArrayAdapter<CharSequence> dropDownAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_list_item_1, al); // Select the drop-down navigation mode. actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); // Create a new Spinner Adapter that contains the values to be displayed in the drop down.
ArrayAdapter dropDownAdapter = ArrayAdapter.createFromResource(this, R.array.my_dropdown_values, android.R.layout.simple_list_item_1); // Assign the callbacks to handle drop-down selections.
actionBar.setListNavigationCallbacks(dropDownAdapter, new OnNavigationListener() {
public boolean onNavigationItemSelected(int itemPosition, long itemId) {
// TODO Modify your UI based on the position of the drop down item selected. return true; } });
使用選單和ActionBar Item
Android Actionbar中常用的Menu型別:
1. Icon Menu:在ActionBar中以圖示形式顯示的Menu
2. Expanded and overflow Menu: 點選more出現的選單,顯示文字而不是圖示。
3. Submenu
建立選單
重寫Activity中的onCreateOptionMenus方法可以建立選單:
static final private int MENU_ITEM = Menu.FIRST; @Override
public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // Group ID
int groupId = 0;
// Unique Menu Item identifier. Used for event handling int menuItemId = MENU_ITEM;
// The order position of the item
int menuItemOrder = Menu.NONE;
// Text to be displayed for this Menu Item
int menuItemText = R.string.menu_item; // Create the Menu Item and keep a reference to it
MenuItem menuItem = menu.add(groupId, menuItemId, menuItemOrder, menuItemText); return true;
}
建立MenuItem的幾個引數:
1. MenuItem所在Group的ID
2. MenuItem的ID,後面可以用findItem方法獲取對應的MenuItem
3. MenuItem在組內的順序
4. MenuItem顯示的文字
獲取已建立的MenuItem:
MenuItem menuItem = menu.findItem(MENU_ITEM);
設定MenuItem的顯示方式
使用setShowAsActionFlags 方法,可以設定MenuItem在ActionBar中的顯示:
SHOW_AS_ACTION :永遠在ActionBar中顯示
SHOW_AS_IF_SPACE :當ActionBar有空白位置的時候顯示
MenuItem型別
1. CheckBox:
// Create a new check box item.
menu.add(0, CHECKBOX_ITEM, Menu.NONE, “CheckBox”).setCheckable(true);
2. Radio Buttons:
// Create a radio button group.
menu.add(RB_GROUP, RADIOBUTTON_1, Menu.NONE, “Radiobutton 1”);
menu.add(RB_GROUP, RADIOBUTTON_2, Menu.NONE, “Radiobutton 2”);
menu.add(RB_GROUP, RADIOBUTTON_3, Menu.NONE, “Radiobutton 3”).setChecked(true);
3. 快捷鍵
// Add a shortcut to this Menu Item, ‘0’ if using the numeric keypad or ‘b’ if using the full keyboard.
menuItem.setShortcut(‘0’, ‘b’);
4. Condensed Title (Condensed Title是指在icon menu的狀態下顯示的標題,在擴充套件(more)那裡會顯示全標題。)
menuItem.setTitleCondensed(“Short Title”);
5. icon
menuItem.setIcon(R.drawable.menu_item_icon);
6. MenuItem Click Listener
menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem _menuItem) { [ ... execute click handling, return true if handled ... ] return true;
} });
7. Intent
menuItem.setIntent(new Intent(this, MyOtherActivity.class));
Action View
menuItem.setActionView(R.layout.my_action_view).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM|MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
可以在ActionView中加Button等控制元件:
View myView = menuItem.getActionView();
Button button = (Button)myView.findViewById(R.id.goButton); button.setOnClickListener(new OnClickListener() {
public void onClick(View v) { // TODO React to the button press. } });
從Fragment中獲取Menu Item:
在Fragment中呼叫setHasOptionsMenu方法,可以告訴Activity這個Fragment中含有MenuItem,從而使Activity獲得並顯示這些MenuItem。
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true);
}
使用XML定義MenuItem
這是目前比較推薦的新增MenuItem的方法,在res/menu中建立XML檔案並將MenuItem定義寫入此XML:
<menu xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:id=”@+id/action_item”
android:icon=”@drawable/action_item_icon”
android:title=”@string/action_item_title”
android:showAsAction=”ifRoom”> </item>
<item android:id=”@+id/action_view_item”
android:icon=”@drawable/action_view_icon”
android:title=”@string/action_view_title”
android:showAsAction=”ifRoom|collapseActionView”
android:actionLayout=”@layout/my_action_view”> </item>
<item android:id=”@+id/action_provider_item”
android:title=”Share”
android:showAsAction=”always” android:actionProviderClass=”android.widget.ShareActionProvider”>
</item> <item android:id=”@+id/item02”
android:checkable=”true”
android:title=”@string/menu_item_two”> </item>
<item android:id=”@+id/item03”
android:numericShortcut=”3”
android:alphabeticShortcut=”3”
android:title=”@string/menu_item_three”> </item>
<item android:id=”@+id/item04”
android:title=”@string/submenu_title”>
<menu> <item android:id=”@+id/item05”
android:title=”@string/submenu_item”> </item>
</menu> </item>
</menu>
然後,在onCreateOptionsMenu中建立Menu:
public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.my_menu, menu); return true;
}
響應Menu選擇事件
Activity中所有的Menu事件都是放在onOptionsItemSelected 中一起處理的:
public boolean onOptionsItemSelected(MenuItem item) { super.onOptionsItemSelected(item); // Find which Menu Item has been selected
switch (item.getItemId()) { // Check for each known Menu Item
case (MENU_ITEM): [ ... Perform menu handler actions ... ]
return true; // Return false if you have not handled the Menu Item default:
return false;
} }
子選單和環境選單
建立子選單:
SubMenu sub = menu.addSubMenu(0, 0, Menu.NONE, “Submenu”);
sub.setHeaderIcon(R.drawable.icon); sub.setIcon(R.drawable.icon);
MenuItem submenuItem = sub.add(0, 0, Menu.NONE, “Submenu Item”);
使用環境選單和彈出選單:
一種方法是重寫View中的onCreateContextMenu方法,這樣任何包含這個View的Activity都會包含這個上下文選單。
@Override
public void onCreateContextMenu(ContextMenu menu) { super.onCreateContextMenu(menu); menu.add(“ContextMenuItem1”);
}
更常用的方法是重寫Activity的onCreateContextMenu方法,然後在onCreate方法中呼叫.
registerForContextMenu(view): @Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EditText view = new EditText(this);
setContentView(view); registerForContextMenu(view); } @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo); menu.setHeaderTitle(“Context Menu”);
menu.add(0, Menu.FIRST, Menu.NONE, “Item 1”).setIcon(R.drawable.menu_item);
menu.add(0, Menu.FIRST+1, Menu.NONE, “Item 2”).setCheckable(true);
menu.add(0, Menu.FIRST+2, Menu.NONE, “Item 3”).setShortcut(‘3’, ‘3’);
SubMenu sub = menu.addSubMenu(“Submenu”);sub.add(“Submenu Item”); }
這樣,在registerForContextMenu中註冊的View中長按螢幕時,就會出現這個環境選單。
彈出選單
建立彈出選單並繫結到View:
final PopupMenu popupMenu = new PopupMenu(this, myView);
建立彈出選單並繫結到Button:
final PopupMenu popupMenu = new PopupMenu(this, button); popupMenu.inflate(R.menu.my_popup_menu); popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) { case (POPUP_ITEM_1) :
// TODO Handle popup menu clicks.
return true; default:
return false;
} }
});
相關推薦
Android 4 學習(20):ActionBar
參考《Pro Android 4.0》 ActionBar 11.0之後,ActionBar在Activity中預設存在,可以在程式碼中設定其顯示與否: ActionBar actionBar = getActionBar(); // Hide the Action Bar actionBa
Android 4 學習(21):對話方塊
對話方塊 建立Dialog的兩種方式: 1. 使用Dialog類或其子類,包括DialogFragment 2. 在Activity中使用Dialog主題(theme) 下面是使用Dialog類的一個例子: // Create the new Dialog.Dialog dialog = n
Android 4 學習(18):搜尋
參考《Professional Android 4 Development》 搜尋 通過下面這幾種方式可以給應用程式新增搜尋功能: Search Bar Search View Quick Search Box 可搜尋的Content Provider 首
Android 4 學習(17):使用Content Resolver
Content Resolver簡介 每個應用程式都有一個ContentResolver例項,通過getContentResolver()方法可以獲取: ContentResolver cr = getContentResolver(); 與Content Provider對應,Cont
Android 4 學習(19):Services
參考《Professional Android 4 Development》 Services Service是invisible的,因此其優先順序不高於visible的Activity,之所以說不高於,是因為我們可以設定Service為在前臺執行。 建立Service Android提供了Ser
Android 4學習(7):使用者介面
參考《Professional Android 4 Development》 Android UI基本元素 下面這些概念是Android UI設計的基礎,深入學習和理解它們是Android UI設計的基礎: View:View是所有UI元素,包括Layout在內,的父
Android 4學習(6):概述
參考:《Professional Android 4 Application Development》 深入瞭解Android Activity 每一個Android Activity都對應於一個使用者介面(UI)。每個Android Application都有一個m
Android NDK學習(二):編譯腳本語法Android.mk和Application.mk
GC make files 文件的 包括 一次 opengl aries 基本語法 一、Android.mk Android.mk分為一下幾部分: LOCAL_PATH:= $(call my-dir), 返回當前文件在系統中的路徑,Android.mk文件開始時必須定義
Android Camera學習(一):如何實現轉動螢幕介面選單跟著轉動效果
最近公司在做車載專案,需要把照相機原本豎向顯示改為橫向顯示。所以研究了下camera選單朝向的問題。 系統提供了一個監聽sensor狀態變化的類OrientationEventListener。在系統程式碼CameraActivity中就是繼承的這個類。 private
Android BLE學習(三):編寫自己的 BLE藍芽讀寫工具(功能仿照nrf master control panel)
背景 由於nordic官方的nrf master control panel只提供了apk,很多同學學習起來都得自己摸索藍芽的讀寫,專案中整理了BLE模組的基本讀寫方法以及一些常用的UUID,並且抽取了一些藍芽操作的流程,方便Android app程式碼開發,
Android BLE學習(一): Android搜尋BLE裝置
背景 總結一下最近ble的學習情況。自從入手ble 51822開發板後就開始不停加班,中途出於好奇,業餘時間寫了一些微控制器上json解析相關的東西,妄圖使用藍芽傳輸json資料,不知道是否實用,既然開始寫了,得寫出點樣子,晃晃蕩蕩,2016年的1月份就過去了
我的OpenCV學習筆記(20):提取元素的輪廓及形狀描述子
先看提取輪廓的程式碼: Mat image = imread("D:/picture/images/binaryGroup.bmp",0); if(!image.data) return -1; imshow("源影象",image); //獲取輪廓 std
linux命令學習(6):ps命令
bytes 釋放 ice cti width kthread hellip 名稱 pts Linux中的ps命令是Process Status的縮寫。ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要
ActiveMQ(20):Consumer高級特性之重新投遞(Redelivery Policy)
jms activemq 重新投遞 一、簡介ActiveMQ在接收消息的Client有以下幾種操作的時候,需要重新傳遞消息: 1:Client用了transactions,且在session中調用了rollback() 2:Client用了transactions,且在調用commit()之前關閉
JAVA學習(七):方法重載與方法重寫、thiskeyword和superkeyword
格式 hello new 初始 per 而且 方法重寫 學習 方式 方法重載與方法重寫、thiskeyword和superkeyword 1、方法重載 重載可以使具有同樣名稱但不同數目和類型參數的類傳遞給方法。 註: 一是重載方法的參數列表必須與被重載的方法不同
Linux命令學習(17):ifconfig命令
廣播 參考 vip 統計 協議 cnblogs 還需要 pro 網絡 版權聲明更新:2017-05-22博主:LuckyAlan聯系:[email protected]/* */聲明:吃水不忘挖井人,轉載請註明出處! 1 文章介紹 我們知道,在windows中,
ArcGIS API for JavaScript學習(1):第一個地圖
樣式表 參數 資源 charset 底層 arcgis 順序 api navi 1.簡介 ArcGIS API for JavaScript跟隨ArcGIS 9.3同時發布,是ESRI根據JavaScript技術實現的調用ArcGIS Server REST API接口的一
Java學習(2):將鍵盤錄入的內容保存到指定文件中
stream exce 創建 txt 關閉 如果 下午 line 再次 要求:保存鍵盤錄入的內容,當鍵盤輸入end時,錄入結束。 1 /** 2 * 保存鍵盤輸入,並以end結束 3 * 4 * @author xcx 5 * @time 2017年6
RabbitMQ學習(六):遠程結果調用
cells actor ble 隨機 get getenv all 求和 int 場景:我們需要在傳輸消息時得到結果 客服端在發送請求時會發送回調隊列,服務端處理事情完成後會將結果返回到回調隊列中,在增加關聯標誌關聯每個請求和服務返回 客戶端代碼: public
facets學習(1):什麽是facets
遺失 air 不同的 無縫切換 over 快速 後來 樣式 觀察 ML 數據集可以包含數億個數據點,每個數據點由數百(甚至數千)的特征組成,幾乎不可能以直觀的方式了解整個數據集。為幫助理解、分析和調試 ML 數據集,谷歌開源了 Facets,一款可視化工具。 Facets