Android学习——ActionBar

ActionBar

1.ActionBar介绍

Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果。
Action bar的主要目的是:

  • 提供一个用于识别应用程序的标示和用户的位置的专用空间。
  • 在不同的应用程序之间提供-致的导航和视觉体验。
  • 突出Activity的关键操作(如”搜索"、 “创建"、“共享”等),并且在可预见的方法内给用户提供快捷的访问。

获得ActionBar的方法很简单: ActionBar actionBar = this. getActionBar();注意代码中的主题设置是否为去掉ActionBar,否则getActionBar()将返回null。

2.添加删除ActionBar

添加Action Bar:
从Android3.0 (API级别 11)开始,ActionBar被包含在所有的使用Theme.Hole主题的Activity (或者是这些Activity的子类)中,当targetSdkVersion或 minSdkVersion属性被设置为“11"或更大的数值是,这个主题是默认的主题一。

删除Action bar:
如果你不想要Action bar,把Activity的主 题设置为Theme Holo.NoActionBar就可以了或者使用Action bar的hide()方法,如下:
ActionBar actionBar = getActionBar();
actionBar hide();

3.ActionBar菜单

当Activity首次启动时,系统会调用onCreateOptionsMenu()方法给你的Activity组装ActionBar和悬浮菜单。
在menu XML文件中,你能够通过给< item >元素声明android:showAsAction="ifRoom"属性,请求把.一个菜单项作为一个操作项来显示。

<menu xmlns:android-"http://schemas android.com/apk/res/android>

<item android:id=*@+id/menu. save"
android:icon="@drawable/ic_ menu_ save"android:title-"@string/menu_ save"
android:showAsAction-"ifRoomlwithText" />

</menu>

示例:
设置菜单栏选项

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">
    <item android:id="@+id/action_settins" android:title="Settings"
        android:orderInCategory="100" app:showAsAction="never"></item>
    <item android:id="@+id/exit" android:title="exit"
        android:orderInCategory="200" app:showAsAction="ifRoom|withText"></item>
</menu>

调用菜单栏方法

package com.example.actionbar;

import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar=getSupportActionBar();
        System.out.println(actionBar);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id=item.getItemId();
        if (id==R.id.action_settins){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

在这里插入图片描述在这里插入图片描述

4.ActionBar标题栏

使用分离式操作栏
要启用分离式操作栏,只需简单的在< application >或< activity >元素中添加uiOptions="splitActionBarWhenNarrow"属性设置就可以了。

导航栏使用应用图标

应用程序应该在这个图标上响应以下两个操作之一:

  • 返回应用程序的“主"Activity;
  • 向应用程序上级页面导航。

当用户触模这个图标时,系统会调用Activity带有android.R.id.home ID的onOptionsltemSelected()方法。
注意:如果你要使用应用图标来返回主页,要注意从Android4.0 (API 级别14)开始,必须通过调用setHomeButtonEnabled(true)方法确保这个图标能够作为一个操作项。

向应用程序上一级页面导航:
应用程序图标能够向上导航,就要在你的ActionBar中调用setDisplayHomeAsUpEnabled(true)方法。

package com.example.actionbar;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ActionBar actionBar=getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);//使图标可以向上进行返回
    }

}

清单文件

<activity
    android:name=".Main2Activity"
    android:label="@string/title_activity_main2"
    android:parentActivityName=".MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity"/>
</activity>

在这里插入图片描述
添加操作页面
搜索菜单
在mune.xml文件中添加item

<item android:id="@+id/search" android:title="search"
        android:orderInCategory="300" app:showAsAction="ifRoom|withText"
        android:icon="@android:drawable/ic_menu_search"
        app:actionViewClass="android.support.v7.widget.SearchView"></item>

在onCreateOptionsMenu方法中写入方法

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main,menu);
        MenuItem searchItem=menu.findItem(R.id.search);
        SearchView searchView= (SearchView) searchItem.getActionView();
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                Toast.makeText(getApplicationContext(), query, Toast.LENGTH_SHORT).show();
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });
        return true;
    }

在这里插入图片描述在这里插入图片描述
分享菜单
添加item

<item android:id="@+id/share" android:title="share"
        android:orderInCategory="400" app:showAsAction="ifRoom"
        android:icon="@android:drawable/ic_menu_share"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"></item>

在onCreateOptionsMenu方法中写入方法

//分享菜单项
MenuItem shareItem=menu.findItem(R.id.share);
ShareActionProvider shareActionprovider= (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
shareActionprovider.setShareIntent(getDefaultIntent());

设置一个Intent

private Intent getDefaultIntent() {
    Intent intent=new Intent(Intent.ACTION_SEND);
    intent.setType("image/*");
    return intent;
}

点击share,会将模拟器上所有可进行分享的方法显示出来
在这里插入图片描述

5.ActionBar导航

当你需要在activity中提供导航tab页时,使用action bar的tab页是一个极佳的选择(而不是用TabWidget),因为系统会根据不同的屏幕尺寸对action bar tab进行调整一屏 幕够宽时放入主action bar,屏幕太窄时放入拆分后的bar。

增加tab页的基本步骤如下:

actionBar. setNavigationMode(ActionBar .NAVIGATION MODE TABS);

  • 实现ActionBar.TabListener接口。 此接口中的回调方法对tab页中的用户作出响应,使你能切换fragment。
  • 针对你要添加的每一个tab页,都要实例化一个ActionBar.Tab并通过调用setTabListener()设置ActionBar.TabListener。还要用setText()和/或setlcon()设置tab页的标题和/或图标。
  • 调用addTab()把所有tab页都加入到action bar中去。
package com.example.actionbar;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;

public class Main3Activity extends AppCompatActivity implements ActionBar.TabListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        ActionBar actionBar=getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//设置为导航条模式
        actionBar.setDisplayShowTitleEnabled(false);

        //添加选项卡
        actionBar.addTab(actionBar.newTab().setText("新闻").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("视频").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("音乐").setTabListener(this));
        actionBar.addTab(actionBar.newTab().setText("游戏").setTabListener(this));
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id=item.getItemId();
        if (id==R.id.action_settins){
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        Toast.makeText(this, tab.getText(), Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {

    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值