参考《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
@Overridepublic 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 selectedpublic 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;
@Overridepublic 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。

@Overridepublic 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都会包含这个上下文菜单。

@Overridepublic void onCreateContextMenu(ContextMenu menu) { super.onCreateContextMenu(menu); menu.add(“ContextMenuItem1”); } 

更常用的方法是重写Activity的onCreateContextMenu方法,然后在onCreate方法中调用.

registerForContextMenu(view):
@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EditText view = new EditText(this);   setContentView(view); registerForContextMenu(view);
}@Overridepublic 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;     } } }); 

转载于:https://www.cnblogs.com/jubincn/p/3522513.html

Android 4 学习(20):ActionBar相关推荐

  1. Android组件学习笔记(简易绘画板)

    自学Android中,根据一位前辈的代码进行学习,理解,在其基础上做了一些改进 功能简述:1,画图2.清空3.改变画笔大小4.全屏渲染5.改变颜色 初始界面是一张图片,下载需注意一下 样例图片: 源代 ...

  2. android service 学习(上)

    转载自:http://www.cnblogs.com/allin/archive/2010/05/15/1736458.html Service是android 系统中的一种组件,它跟Activity ...

  3. Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  4. 【建议收藏】复盘:2021年最新、最全、最实用的Android岗学习资料/面试真题

    前言 2021年已经过去一大半也到了"金九银十"火热招聘的时候,很多小伙伴都蠢蠢欲动想要刚给自己涨一波薪资:面试作为涨薪最直接最有效的方式,我们需要花费巨大的精力和时间来准备.除了 ...

  5. android ApiDemos学习1 主界面动态ListView显示

    0 Android提供了一个供开发者学习使用的示例程序.其界面如下.图中可以看到,应用列表应为ListView,看其源码发现,并非为简单的ListView,而是采用动态加载的方式. 1 主界面代码如下 ...

  6. android开发学习之路——连连看之游戏逻辑(五)

    GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...

  7. Android:日常学习笔记(6)——探究活动(3)

    Android:日常学习笔记(6)--探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...

  8. android菜鸟学习笔记27----Fragment的简单使用

    1.Fragment的生命周期: 简单在新建一个MyFragment继承自Fragment,重写各个生命周期回调方法,各个方法中直接输出标识相关函数被调用的信息. 重写MainActivity的各个生 ...

  9. Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab

    今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可以 ...

最新文章

  1. 基于OpenCV Haar实战级联分类器的使用
  2. Rust编写的新终端多路复用器
  3. 如何优化linux服务器,手把手教你如何优化linux服务器
  4. android 浏览器源码分析,从源码出发深入理解 Android Service
  5. matlab均值量化函数_在matlab中理解抽样量化的概念:均匀量化的实现
  6. DeepEarth中的拖放行为(DragBehavior)
  7. UDT源码剖析(二):UDT自带例程recvfile注释
  8. linux桌面2k分辨率,解决ubuntu下外接2k显示器却没法调2k分辨率问题
  9. python和access哪个难_python和access的区别
  10. LayUI的后台管理模板
  11. 网友心中的高分电影合集,大家一起来拯救剧荒!欢迎补充!!!
  12. 中柏pad7安装linux,中柏电脑下载与安装win7iso镜像系统教程
  13. Hacked Exam-Google Codejam 2021 Round 1A
  14. 阿里云物联网平台设备之间通讯、数据转发
  15. Java 导入Excel数据
  16. 双11狂欢与价值战,苏宁悟空榜给你真实的数据
  17. Android:Handler中的Idle Handler
  18. 6个开源项目提高GIS编程技能
  19. java微信公众号自动回复文字加图片
  20. jacoco关于Java代码覆盖率你不得不会的基操!

热门文章

  1. php 判断同时存在英文跟数字,php判断输入是否是纯数字,英文,汉字的方法
  2. redhat下的iptables和firewalld 笔记
  3. 《零基础》MySQL LIKE 子句(十六)
  4. 基于java springboot+mybatis学生学科竞赛管理管理系统设计和实现
  5. Navicat连接Mysql 8.0.16报错:Client does not support authentication protocol requested by server?
  6. moel vue 自定义v_vue组件,自定义v-model方法
  7. 互相引用 spring_听说你还不知道Spring是如何解决循环依赖问题的?
  8. c++ windows 蓝牙库_蓝牙翻页笔(PPT 控制器) | ESP32学习之旅-Arduino版
  9. java socket 阻塞模式_Java中Socket Read阻塞问题
  10. github随时同步代码_GitHub代码下载和同步