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);
    }
}

Android学习——ActionBarAndroid学习——ActionBar

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>

Android学习——ActionBar
添加操作页面
搜索菜单
在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;
    }

Android学习——ActionBarAndroid学习——ActionBar
分享菜单
添加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,会将模拟器上所有可进行分享的方法显示出来
Android学习——ActionBar

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) {

    }
}

Android学习——ActionBar

上一篇:android 自定义actionbar(顶部导航栏)


下一篇:运维开发利器:使用VSC来进行Python Django开发