ActionBar简单使用——添加搜索按钮;让不同的Activity上显示不同的ActionBar;添加Tab标签;实现DrawerLayout并用ActionBarDrawerToggle控制

本文详细介绍了如何在Android中使用ActionBar,包括创建ActionBar、添加搜索按钮、实现详情页面配置,展示不同Activity的ActionBar,添加Tab标签,以及运用DrawerLayout和ActionBarDrawerToggle实现抽屉效果。此外,还分享了一个Android学习资源。
摘要由CSDN通过智能技术生成
  • 什么是ActionBar
    • Android3.0以后出现的一个API专门用来开发应用顶部的ActionBar
    • 他是一个显示在屏幕顶部的控件,它可以在顶部的左边显示应用的logo图标和右边的一些操作菜单(如:搜索)
    • Google攻城狮在开发ActionBar API的同时,也开发了好多辅助功能,比如抽屉,可以在顶部控制抽屉的开关;Tab标签;等等,下面会介绍一些常用的功能;

创建ActionBar

  • 由于ActionBar是Android3.0之后出现的API,所以,默认只最低兼容3.0以上的设备。即在AndroidManifest.xml配置文件中,我们配置的最低版本号应为11
<manifest ... >
    <uses-sdk android:minSdkVersion="11" ... />
    ...
</manifest>
  • 但是想兼容3.0以下2.1以上的也不是不可以,哈哈哈,但是需要引入一个V7 appcompat libryary包。和V4包有点像,但他两一点关系也没有,别混淆。这个包在我们的SDK的目录下已经有了"开发工具安装根目录\sdk\extras\android\m2repository\com\android\support" 不过这个我感觉用着不爽,这个还行,可以在里面看到源码V7 appcompat libryary免费下载地址
    • 如何给当前项目添加支持库(添加libryary包):
      1. 将V7包解压后,Import进我们的eclipse中;
      2. 然后,在我们当前项目名上点击右键;
      3. 在弹出的右键菜单中,选择倒数第二个的”Properties”(左键点击项目名后直接按Alt+Enter键也可以);
      4. 接下来,在左边的条目栏中选择第二个”Android”;
      5. 在右边的窗口中,下拉到最底部;
      6. 在Library模块下选择ADD,在弹出的对话框中选择”android-support-v7-appcompat”;
      7. 然后一路点击OK就可以了。
      8. 注意应如后有可能会有V4包的版本冲突,将两个工程都调成一样的就可以了
  • 我们导入了V7包之后就可以正式进行ActionBar的创建了
    1. 在MainActivity中继承ActionBarActivity
    2. 在AndroidManifest.xml文件中修改主题

      在application标签下,吧android:theme=”“中的值设为Theme.AppCompat主题中的一个,我们选择<activity android:theme="@style/Theme.AppCompat.Light" ... >
      现在一个简单的ActionBar就建成功了:
      ActionBar创建成功


接下来我们将对其进行一步步的定制

ActionBar搜索按钮

  • 在上面的图片中,可以看到右上角是一个菜单键,点击会弹出菜单项。所以,这其实就是菜单按钮
    一、配置main.xml:到res文件夹下的menu文件夹里的main.xml文件里,是在那定义了菜单键,我在教程上拷贝如下代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button(搜索键的配置) -->
<item android:id="@+id/action_search"
    android:icon="@drawable/ic_action_search"
    android:title="@string/action_search"
    android:showAsAction="ifRoom" />
<!-- Settings, should always be in the overflow(设置键的配置) -->
<item android:id="@+id/action_settings"
      android:title="@string/action_settings"
      android:showAsAction="never" />
</menu>

在上面的代码块中,第一个Item是配置搜索键的,第二个Item是配置设置键的,我们只想要看到搜索键,所以把第二个删掉。但是这只是从官方教程上拷贝下来的,要想符合我们的要求还需进一步配置
1. 添加我们的自定义命名空间:xmlns:actionBar="http://schemas.android.com/apk/res-auto"
2. 将android:showAsAction="ifRoom"改为actionBar:showAsAction="ifRoom
3. 在Item中添加一个V7包的配置:android:actionViewClass="android.support.v7.widget.SearchView"
最终的manu.xml配置文件

<menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:actionBar="http://schemas.android.com/apk/res-auto" >
    <!-- Search, should appear as action button -->
    <item android:id="@+id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          actionBar:showAsAction="ifRoom"
          actionBar:actionViewClass="android.support.v7.widget.SearchView" />
</menu>

二、初始化菜单并添加逻辑

// 初始化菜单并添加逻辑
@SuppressLint("NewApi")
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    // "版本的控制",如果低于3.0版本的就不执行此方法
    if(android.os.Build.VERSION.SDK_INT > 11){
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        searchView.setOnQueryTextListener(this);// 搜索的监听
    }
    return true;
}

三、处理ActionBar 菜单条目的点击事件:在Activity中添加代码

/**
 * 处理ActionBar的菜单条目的点击事件,以后所有在ActionBar上的东西,
 * 都需要在这里处理一下
 */
@Override
public boolean onOptionsItemSelected(MenuItem item){
    // Handle presses on the action bar items
    if(item.getItemId() == R.id.action_search){
        Toast.makeText(getApplicationContext(), "搜索", 0).show();
    }
    return super.onContextItemSelected(item);
}

三、 查询:在MainActivity中需要实现OnQueryTextListener类

  • 同时需要实现两个方法

    • onQueryTextSubmit()

      @Override
      public boolean onQueryTextSubmit(String query) {
          Toast.makeText(getApplicationContext(), "搜索提交", 0).show();
          return true;
      }
      
    • 介绍:

    Called when the user submits the query. 当用户提交数据时调用
    Returns:true if the query has been handled by the listener, false to let the SearchView perform the default action.(当查询已经被监听时返回true,默认情况下返回false,不会查询)

    • onQueryTextChange()

      @Override
      public boolean onQueryTextChange(String newText) {
          Toast.makeText(getApplicationContext(), "文本改变", 0).show();
          return true;
      }
    • 介绍:

      Called when the query text is changed by the user.当查询文本改变时被调用
      Returns:false if the SearchView should perform the default action of showing any suggestions if available, true if the action was handled by the listener.和上面的方法一样

MainActivity.java

package com.example.actionbar;

import android.os.Bundle;
import android.annotation.SuppressLint;
import android.support.v7.app.ActionBarActivity;
impor
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值