Android学习之ActionBar 一

操作栏是识别应用程序和用户位置的窗口功能。,并且提供用户操作和导航模式。

添加操作栏
首先在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>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值