1:ActionBar

一、核心功能:

1、一个专门的空间用来显示你的app标识,并且还可以指出目前所处在app哪个页面。

2、以一种可预见的方式访问重要的操作(比如检索)

3、支持导航和视图切换(通过Tabs和下拉列表)

二、建立ActionBar

设置一个基本的ActionBar,需要你的app使用一个action bar可用的Activity主题。如何声明主题又取决于你的app支持的Android最低版本。

a.仅支持Android3.0以上版本

从Android3.0开始,所有使用Theme.Holo主题(或者它的子类)的activity都包含了action bar,当targetSdkVersion或者minSdkVersion属性被设置成“11”或更大时,它是默认主题。如果创建自定义主题,继承Theme.Holo的一个主题作为父类即可。

b.支持Android2.1及以上版本

需加载Android Support库(引入v7 appcompat library),然后让Activity继承ActionBarActivity,最后在清单文件中给<application>或者<activity>使用一个Theme.AppCompat主题。如:

<activity android:theme="@style/Theme.AppCompat.Light" ... >
自定义主题,同上继承Theme.AppCompat。

三、添加ActionBar

直接出现在action bar中的icon或文本被称作action buttons(操作按钮),安排不下的或不足够重要的操作被隐藏在action overflow中。

a.xml中定义布局样式

res/menu下定义布局

b.添加响应事件

先在activity中实现onCreateOptionsMenu()中inflate菜单资源:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
<span style="white-space:pre">	</span>// 为ActionBar扩展菜单项
<span style="white-space:pre">	</span>MenuInflater inflater = getMenuInflater();
<span style="white-space:pre">	</span>inflater.inflate(R.menu.main_activity_actions, menu);
<span style="white-space:pre">	</span>return super.onCreateOptionsMenu(menu);
}
然后添加响应事件:在onOptionsItemSelected()

@Override
public boolean onOptionsItemSelected(MenuItem item) {
<span style="white-space:pre">	</span>// 处理动作按钮的点击事件
<span style="white-space:pre">	</span>switch (item.getItemId()) {
<span style="white-space:pre">	</span>case R.id.action_search:
<span style="white-space:pre">		</span>openSearch();
<span style="white-space:pre">		</span>return true;
<span style="white-space:pre">	</span>case R.id.action_settings:
<span style="white-space:pre">		</span>openSettings();
<span style="white-space:pre">		</span>return true;
<span style="white-space:pre">	</span>default:
<span style="white-space:pre">		</span>return super.onOptionsItemSelected(item);
<span style="white-space:pre">	</span>}
}
c.为Activity添加返回到前一个Activity按钮
在action bar中为用户提供一个导航到逻辑父屏的up button。在AndroidMainfest文件中的action标签中添加:

android:parentActivityName="逻辑父Activity"
然后在onCreate()中把app icon设置成可用的向上按钮:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// 如果你的minSdkVersion属性是11活更高, 应该这么用:
// getActionBar().setDisplayHomeAsUpEnabled(true);

四、ActionBar的风格变化
a.先找到系统的主题

Android包含两个基本的activity主题,这两个主题决定了action bar的颜色:

Theme.Holo:一个“暗”的主题

Theme.Holo.Light:一个“淡”的主题

当使用Support库时,必须使用Theme.AppCompat主题替代:

Theme.AppCompat和Theme.AppCompat.Light

b.自定义主题
1)自定义背景

重写主题,然后主题中引入自定义的action bar样式:重写actionBarStyle属性来改变action bar的背景。actionBarStyle属性指向另一个样式;在该样式里,通过指定一个drawable资源来重写background属性。

<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 应用于程序或者活动的主题 -->
<span style="white-space:pre">	</span><style name="CustomActionBarTheme"
<span style="white-space:pre">		</span>parent="@android:style/Theme.Holo.Light.DarkActionBar">
<span style="white-space:pre">		</span><item name="android:actionBarStyle">@style/MyActionBar</item>
<span style="white-space:pre">	</span></style>
<!-- ActionBar 样式 -->
<span style="white-space:pre">	</span><style name="MyActionBar"
<span style="white-space:pre">		</span>parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<span style="white-space:pre">		</span><item name="android:background">@drawable/actionbar_background</item>
<span style="white-space:pre">		</span>自定义背景
<span style="white-space:pre">		</span>仅支持 Android 3.0 和更高
<span style="white-space:pre">	</span></style>
</resources>
最后在AndroidMainfest中使用该主题。

关于支持2.1请自行百度,不再说明。

2)自定义文本颜色

需要分别重写每个元素的属性:

Action Bar的标题:创建自定义样式,并指定textColor属性;同时,在你的自定义actionBarStyle中为titleTextStyle属性指定为刚才的自定义样式。

Action bar tabs:在你的activity主题中重写actionBarTabTextStyle。

Action按钮:在你的activity主题中重写actionMenuTextColor。

仅支持Android3.0和更高,关于2.1自行百度:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<span style="white-space:pre">	</span><!-- 应用于程序或者活动的主题 -->
<span style="white-space:pre">	</span>支持 Android 2.1 和更高
<span style="white-space:pre">	</span>自定义文本颜色
<span style="white-space:pre">	</span>仅支持 Android 3.0 和更高
<span style="white-space:pre">	</span><style name="CustomActionBarTheme"
<span style="white-space:pre">			</span>parent="@style/Theme.Holo">
<span style="white-space:pre">			</span><item name="android:actionBarStyle">@style/MyActionBar</item>
<span style="white-space:pre">			</span><item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
<span style="white-space:pre">			</span><item name="android:actionMenuTextColor">@color/actionbar_text</item>
<span style="white-space:pre">		</span></style>
<span style="white-space:pre">	</span><!-- ActionBar 样式 -->
<span style="white-space:pre">		</span><style name="MyActionBar"
<span style="white-space:pre">			</span>parent="@style/Widget.Holo.ActionBar">
<span style="white-space:pre">			</span><item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
<span style="white-space:pre">		</span></style>
<span style="white-space:pre">	</span><!-- ActionBar 标题文本 -->
<span style="white-space:pre">		</span><style name="MyActionBarTitleText"
<span style="white-space:pre">			</span>parent="@style/TextAppearance.Holo.Widget.ActionBar.Title">
<span style="white-space:pre">			</span><item name="android:textColor">@color/actionbar_text</item>
<span style="white-space:pre">		</span></style>
<span style="white-space:pre">	</span><!-- ActionBar Tab标签 文本样式 -->
<span style="white-space:pre">		</span><style name="MyActionBarTabText"
<span style="white-space:pre">			</span>parent="@style/Widget.Holo.ActionBar.TabText">
<span style="white-space:pre">			</span><item name="android:textColor">@color/actionbar_text</item>
<span style="white-space:pre">		</span></style>
</resources>

3)自定义Tab Indicator

重写actionBarTabStyle属性来改变navigation tabs使用的指示器。actionBarTabStyle属性指向另一个样式资源;在该样式资源里,通过指定一个state-list drawable来重写background属性。

<?xml version="1.0" encoding="utf-8"?>
<span style="white-space:pre">	</span>仅支持 Android 3.0 和更高
<span style="white-space:pre">	</span><resources>
<span style="white-space:pre">	</span><!-- 应用于程序或活动的主题 -->
<span style="white-space:pre">	</span><style name="CustomActionBarTheme"
<span style="white-space:pre">		</span>parent="@style/Theme.Holo">
<span style="white-space:pre">		</span>item name="android:actionBarTabStyle">@style/MyActionBarTabs</item>
<span style="white-space:pre">	</span></style>
<span style="white-space:pre">	</span><!-- ActionBar tabs 标签样式 -->
<span style="white-space:pre">	</span><style name="MyActionBarTabs"
<span style="white-space:pre">		</span>parent="@style/Widget.Holo.ActionBar.TabView">
<span style="white-space:pre">	</span><!-- 标签指示器 -->
<span style="white-space:pre">		</span><item name="android:background">@drawable/actionbar_tab_indicator</item>
<span style="white-space:pre">	</span></style>
</resources>

五、ActionBar覆盖叠加

hide()和show()可显示和隐藏action bar。但是,这将导致activity基于新尺寸重新计算和绘制布局。为了避免这种情况,可为action  bar启用叠加模式。在叠加模式下,所有可用的空间都会被用来布局就像ActionBar不存在一样,并且action bar会叠加在你的布局之上。这样布局顶部就会有点被遮挡,但当action bar隐藏或显示时,系统不需要调整布局。

Note:如果你希望action bar下面的布局部分可见,可创建一个背景部分透明的自定义样式的action bar。

a.启用叠加模式

需要自定义一个主题,该主题继承于已经存在的action bar主题,并设置android:windowActionBarOverlay属性为true。2.1自行百度。

叠加模式可能会遮挡一部分该显示的内容,为了避免这种情况,可用padding或margin来实现:android:paddingTop="?android:attr/actionBarSize"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值