Android ActionBar
来源:互联网 发布:豆豆软件下载 编辑:程序博客网 时间:2024/06/05 09:59
ActionBar是Android3.0的重要更新之一。归纳起来,ActionBar提供了如下功能
1.显示选项菜单的菜单项(将菜单显示为Action Item)
2.使用程序图标作为返回home主屏或向上的导航操作。
3.提供交互式View作为Action View。
4.提供基于Tab的导航方式,可用于切换多个Fragment。
5.提供基于下拉的导航方式。
启用ActionBar
最新的And容地版本已经默认启用了ActionBar,因此只需要在AndroidManifest.xml文件的sdk配置中指定该应用的目标版本高于11,默认就会启用ActionBar。如果希望关闭ActionBar,则可设置应用主题为xxx.NoActionBar。在实际项目中,通常推荐使用代码来控制ActionBar的显示和隐藏。
ActionBar actionBar;actionBar = getActionBar();actionBar.show();actionBar.hide();修改默认的ActionBar标题
默认情况下,系统会使用应用程序默认的icon来作为ActionBar的图标。我们可以在AndroidManifest中对其进行修改。
使用ActionBar显示选项菜单
目前,Android不再强制要求手机提供menu键,提供ActionBar作为解决方案,ActionBar可以将选项菜单显示成Action Item。从Android3.0开始,MenuItem新增如下方法
setShowAsAction(int actionEnum):该方法设置是否将该菜单项显示在ActionBar上作为Action Item
该方法支持如下参数:
SHOW_AS_ACTION_ALWAYS: 总是将MenuItem显示在ActionBar上面
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW:将ActionView折叠成普通菜单项。
SHOW_AS_ACTION_IF_ROOM:当ActionBar位置足够时才显示MenuItem
SHOW_AS_ACTION_NEVER:不将该MenuItem显示在ActionBar上面
SHOW_AS_ACTION_WITH_TEXT:将该MenuItem显示在ActionBar上,并显示菜单项的文本。
实际项目中推荐使用xml资源文件来定义菜单,因此Android允许在xml菜单资源文件中为<item .../>指定如下属性
android:showAsAction:其作用类似于setShowAsAction,所以也支持类似上面的属性值。
定义menu资源文件
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.actionbartest.MainActivity" > <item android:id="@+id/football" android:icon="@drawable/football" android:title="@string/strFootball" android:showAsAction="ifRoom|withText" /><item android:id="@+id/basketball" android:icon="@drawable/basketball" android:title="@string/strBasketball" android:showAsAction="ifRoom|withText" /><item android:id="@+id/volleyball" android:icon="@drawable/volleyball" android:title="@string/strVolleyball" android:showAsAction="ifRoom|withText" /><item android:id="@+id/badmintonball" android:icon="@drawable/badminton" android:title="@string/strBadminton" android:showAsAction="ifRoom|withText" /></menu>
可以看出来,ActionBar上的按钮默认情况下只显示图标,不显示文字,title的内容默认只在overflow中显示,那为什么在ActionBar中显示的图标定义title呢?
1.在空间不足的情况下,overflow中要显示的是title
2.如果按钮在ActionBar中,通过长按该按钮会提示该按钮的title
Overflow
同一份代码,在某些手机上会显示overflow,有些手机就不会显示overflow。这是什么原因呢?由于现在android设备不强制要求menu键,在有menu键的手机上就不会显示overflow,点击menu键就会显示那些原本在overflow中的选项,而没有menu键的手机都是会显示overflow的。我们可以通过设置来改变这种情况。
public void setOverflowShowingAlways(){try {ViewConfiguration config=ViewConfiguration.get(this);Field menukeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");menukeyField.setAccessible(true);menukeyField.setBoolean(config, false);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}在onCreate函数中加入setOverFlowShowingAlways就可以屏蔽物理menu键(如果有的话),总是显示overflow。sHasPermanentMenuKey是一个ViewConfig类的一个静态变量,系统就是通过这个变量来判断设备是否存在menu键。
通过ActionBar进行图标导航
通过图片可以看出,ActionBar图标有一个向左的箭头,默认情况是没有这个箭头的,这就是图标导航,简单来说,其作用就是返回上一个Activity。我们可以通过调用setDisplayHomeAsUpEnable()来启用图标导航
public class MainActivity extends Activity implements ActionBar.TabListener{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ActionBar actionBar;actionBar = getActionBar();actionBar.setDisplayHomeAsUpEnabled(true);}图标导航的id为android.R.id.home。
响应ActionBar的点击事件
public boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();switch (id) {case R.id.football:Toast.makeText(this, "football", Toast.LENGTH_SHORT).show();break;case R.id.badmintonball:Toast.makeText(this, "badminton", Toast.LENGTH_SHORT).show();break;case R.id.basketball:Toast.makeText(this, "basketball", Toast.LENGTH_SHORT).show();break;case R.id.volleyball:Toast.makeText(this, "volleyball", Toast.LENGTH_SHORT).show();break;case android.R.id.home:Toast.makeText(this, "home", Toast.LENGTH_SHORT).show();break;default:break;}return super.onOptionsItemSelected(item);}
添加ActionView
ActionView是在ActionBar中替换按钮的控件.它允许用户在不切换界面的情况下实现一些功能。以控件searchView为例,介绍一下。
可以看到搜索图标了。
添加Tabs导航
在onCreate中加入
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);actionBar.addTab(actionBar.newTab().setText("第一页").setTabListener(this));actionBar.addTab(actionBar.newTab().setText("第二页").setTabListener(this));actionBar.addTab(actionBar.newTab().setText("第三页").setTabListener(this));这只是实现了Tab页,我们可以通过自定义ActionBar的style来定制符合需求的ActionBar
<style name="MyActionBarTheme" parent="android:Theme.Holo.Light"> <item name="android:actionBarStyle">@style/MyActionBar</item> <item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item> <item name="android:actionBarTabStyle">@style/MyActionBarTabs</item></style><style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">#f4842d</item> <item name="android:backgroundStacked">#d27026</item> <item name="android:titleTextStyle">@style/MyActionBarTitleText</item></style><style name="MyActionBarTitleText" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> <item name="android:textColor">#fff</item></style><style name="MyActionBarTabText" parent="@android:style/Widget.Holo.ActionBar.TabText"> <item name="android:textColor">#fff</item></style><style name="MyActionBarTabs" parent="@android:style/Widget.Holo.ActionBar.TabView"> <item name="android:background">@drawable/tab_indicator</item></style>
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/unpressed" /> <item android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/pressed" /> <item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/selected" /> <item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/pressed" /></selector>
- Android--ActionBar
- android ActionBar
- Android ActionBar
- android ActionBar
- Android ActionBar
- Android ActionBar
- android actionBar
- Android actionBar
- android - actionbar
- Android ActionBar
- Android ActionBar
- Android ActionBar
- Android ActionBar
- android ActionBar
- android Actionbar
- android ActionBar
- android actionbar
- android---(actionBar)
- SNMP协议详解
- 浅析浏览器渲染页面过程
- C++ 引用对象成员的三种方式
- php设计模式-工厂模式
- C++运算符重载(五)
- Android ActionBar
- Linux驱动学习之路一
- Ubuntu桌面启动器设置
- Java浮点数的精确计算及表示
- spring mvc
- HTTPS证书问题 iOS
- 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹
- 微信小程序开发之圆形菜单 仿建行圆形菜单
- Android 监听应用集成的SDK中的 Activity。