操作栏是识别应用程序和用户位置的窗口功能。,并且提供用户操作和导航模式。
添加操作栏
首先在res下的menu中新建一个menu.xml,
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
>
<item
android:id="@+id/bendi"
android:title="本地音乐"
app:showAsAction="always"
/>
<item
android:id="@+id/wangluosousuo"
android:title="网络搜索"
app:showAsAction="always"
/>
</menu>
然后在覆盖onCreateOptionsMenu()方法。因为当活动首次启用的时候,系统会通过调用onCreateOptionsMenu()来填充动作栏和溢出菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.titleactionbar,menu);
return true;
}
效果:
删除操作栏
activity android:theme = “@ android:style / Theme.Holo.NoActionBar” >
或者:
ActionBar actionBar =getActionBar() ;
actionBar.hide ();
拆分动作栏
要启用拆分操作栏,只需要添加uiOptions=”splitActionBarWhenNarrow”到您的 或 manifest元素。
请注意,Android会根据当前屏幕尺寸以各种方式调整操作栏的外观。使用分割动作栏只是一个选项,您可以启用此选项,以允许操作栏进一步优化不同屏幕尺寸的用户体验。在这样做时,您还可以允许操作栏将导航选项卡折叠到主操作栏。也就是说,如果您在操作栏中使用导航标签,一旦操作项目在窄屏幕上分离,导航选项卡就可以适应主动作栏,而不是分成“堆叠的动作栏”。具体来说,如果您已禁用操作栏图标和标题(带setDisplayShowHomeEnabled(false)和setDisplayShowTitleEnabled(false)),则导航选项卡将折叠到主操作栏中,如图中的第二个设备所示。
FLAG_ACTIVITY_CLEAR_TOP:当你需要返回到home activity的时候,应该讲这个标志包含在Intent中。有了这个标志,如歌你开始的活动已经存在于当前的任务当中,那么它上面的所有活动就会被销毁,并被待到前面。因为 home 是一个相当于回去的操作,通常不应该创建一个新的home活动实例。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.bendi:
Intent intent = new Intent(this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
break;
如果用户可以从另一个应用程序输入当前活动,您可能还需要添加该FLAG_ACTIVITY_NEW_TASK标志。此标志确保当用户导航“home”或“up”时,新活动不会添加到当前任务,而是在属于您的应用程序的任务中启动。例如,如果用户通过另一个应用程序调用的意图来启动应用程序中的活动,则选择操作栏图标在家中或之后导航,该FLAG_ACTIVITY_CLEAR_TOP标志将在属于您的应用程序的任务(而不是当前任务)中启动活动)。系统将以新的活动作为根活动来启动新任务,或者如果在后台使用该活动的实例存在现有任务,onNewIntent()那么该任务被提出并且目标活动被接收。因此,如果您的活动接受来自其他应用程序的意图(它声明任何通用意图筛选器),则通常应将该FLAG_ACTIVITY_NEW_TASK标志添加到intent
为下级Acivity添加向上按钮:
在不是程序入口的其他所有屏中,需要在action bar中为用户提供一个导航到逻辑父屏的up button
例子:
<application ... >
...
<!-- 主 main/home 活动 (没有上级活动) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- 主活动的一个子活动-->
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- meta-data 用于支持 support 4.0 以及以下来指明上级活动 -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
然后,通过调用setDisplayHomeAsUpEnabled() 来把 app icon 设置成可用的向上按钮:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_displaymessage);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// 如果你的minSdkVersion属性是11活更高, 应该这么用:
// getActionBar().setDisplayHomeAsUpEnabled(true);
}
自定义ActionBar的风格
Android包含两个基本的activity主题,这两个主题决定了action bar的颜色:
- Theme.Holo,一个“dark”主题
Theme.Holo.Light,一个“light”主题
可以通过manifest的theme来设置:
<application android:theme="@android:style/Theme.Holo.Light" ... />
当使用 Support 库时,必须使用 Theme.AppCompat 主题替代:
- Theme.AppCompat,一个“dark”的主题
- Theme.AppCompat.Light,一个“light”的主题
- Theme.AppCompat.Light.DarkActionBar,一个带有“dark” action bar 的“light”主题
自定义背景
通过为activity创建一个自定义主题,并重写actionBarStyle属性来实现。
当仅支持android3.0和更高版本:
res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 应用于程序或者活动的主题 -->
<style name="CustomActionBarTheme"
parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar 样式 -->
<style name="MyActionBar"
parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">@drawable/actionbar_background</item>
</style>
</resources>
然后将主题应用到app的全局或者单个app之中
<application android:theme="@style/CustomActionBarTheme" ... />
当使用Support库的时候,需要这样:
res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 应用于程序或者活动的主题 -->
<style name="CustomActionBarTheme"
parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<!-- 支持库兼容 -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar 样式 -->
<style name="MyActionBar"
parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="android:background">@drawable/actionbar_background</item>
<!-- 支持库兼容 -->
<item name="background">@drawable/actionbar_background</item>
</style>
</resources>
自定义文本颜色
Action bar tabs:在 activity 主题中重写 actionBarTabTextStyle
Action 按钮:在 activity 主题中重写 actionMenuTextColor
仅支持Android3.0和更高:
res/values/themes.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 应用于程序或者活动的主题 -->
<style name="CustomActionBarTheme"
parent="@style/Theme.Holo">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
<item name="android:actionMenuTextColor">@color/actionbar_text</item>
</style>
<!-- ActionBar 样式 -->
<style name="MyActionBar"
parent="@style/Widget.Holo.ActionBar">
<item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
</style>
<!-- ActionBar 标题文本 -->
<style name="MyActionBarTitleText"
parent="@style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@color/actionbar_text</item>
</style>
<!-- ActionBar Tab标签 文本样式 -->
<style name="MyActionBarTabText"
parent="@style/Widget.Holo.ActionBar.TabText">
<item name="android:textColor">@color/actionbar_text</item>
</style>
</resources>
支持库兼容:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 应用于程序或者活动的主题 -->
<style name="CustomActionBarTheme"
parent="@style/Theme.AppCompat">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="android:actionBarTabTextStyle">@style/MyActionBarTabText</item>
<item name="android:actionMenuTextColor">@color/actionbar_text</item>
<!-- 支持库兼容 -->
<item name="actionBarStyle">@style/MyActionBar</item>
<item name="actionBarTabTextStyle">@style/MyActionBarTabText</item>
<item name="actionMenuTextColor">@color/actionbar_text</item>
</style>
<!-- ActionBar 样式 -->
<style name="MyActionBar"
parent="@style/Widget.AppCompat.ActionBar">
<item name="android:titleTextStyle">@style/MyActionBarTitleText</item>
<!-- 支持库兼容 -->
<item name="titleTextStyle">@style/MyActionBarTitleText</item>
</style>
<!-- ActionBar 标题文本 -->
<style name="MyActionBarTitleText"
parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/actionbar_text</item>
<!-- 文本颜色属性textColor是可以配合支持库向后兼容的 -->
</style>
<!-- ActionBar Tab标签文本样式 -->
<style name="MyActionBarTabText"
parent="@style/Widget.AppCompat.ActionBar.TabText">
<item name="android:textColor">@color/actionbar_text</item>
<!-- 文本颜色属性textColor是可以配合支持库向后兼容的 -->
</style>
</resources>