Android中通过ActionBar为标题栏添加搜索及分享视窗

发布时间 - 2026-01-10 22:04:09    点击率:

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

1.提供一个用于识别应用程序的标示和用户的位置的专用空间。

2.在不同的应用程序之间提供一致的导航和视觉体验。

3.突出Activity的关键操作(如“搜索”、“创建”、“共享”等),并且在可预见的方法内给用户提供快捷的访问。

今天我们就简单梳理一下如何通过ActionBar为标题添加“搜索”和“分享”的操作视窗,如下图:

操作视窗是作为操作项目按钮的替代品显示在操作栏中的一个可视构件。例如,如果你有一个用于搜索的可选菜单项,你可以用Searchview类来替代操作栏上的搜索按钮。

要个菜单资源中的一个项目声明一个操作视窗,你既可以使用android:actionLayout属性也android:actionviewClass属性来分别指定一个布局资源或要使用的可视构件类。

与操作视窗类似,操作提供器(由ActionProvider类定义的)用一个定制的布局代替一个操作项目,它还需要对所有这些项目行为的控制。当你在操作栏中给一个菜单项声明一个操作项目时,它不仅要一个定制的布局来控制这个菜单项的外观,而且当它在显示在溢出菜单中时,还要处理它的默认事件。无论是在操作栏中还是在溢出菜单中,它都能够提供一个子菜单。例如,ActionProvider的扩展类ShareActionProvider,它通过在操作栏中显示一个有效的共享目标列表来方便共享操作。与使用传统的调用ACTION_SEND类型Intent对象的操作项不同,你能够声明一个ShareActionProvider对象来处理一个操作项。这种操作提供器会保留一个带有处理ACTION_SEND的Intent对象的应用程序的下拉列表,使这个菜单项显示在溢出菜单中。因此,当你使用像这样的操作提供器时,你不必处理有关这个菜单项的用户事件。要给一个操作项声明一个操作提供器,就要在菜单资源中对应的<item>元素中定义android:actionProviderClass属性,提供器要使用完整的类名。

第一步:建立menu资源文件

建立menu资源文件,设置搜索和分享的ITEM功能组件。

(1)新建menu文件夹,如图

(2)在menu资源文件夹下建立serch_share_menu.xml文件(自定义名称)

(3)serch_share_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/search"
    app:actionViewClass="android.support.v7.widget.SearchView"
    android:icon="@android:drawable/ic_menu_search"
    android:orderInCategory="100"
    android:title="搜索"
    app:showAsAction="always|collapseActionView" />
  <item
    android:id="@+id/share"
    android:icon="@android:drawable/ic_menu_share"
    android:orderInCategory="200"
    android:title="共享"
    app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
    app:showAsAction="ifRoom" />
</menu>

第二步:java中功能实现代码MainActivity.java:

import android.content.Intent;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.SearchView;
import android.support.v7.widget.ShareActionProvider;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
/**
 * Created by panchengjia on 2016/12/23.
 */
public class MainActivity extends AppCompatActivity {
  SearchView searchView;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    //使用菜单填充器获取menu下的菜单资源文件
    getMenuInflater().inflate(R.menu.search_share_menu,menu);
    //获取搜索的菜单组件
    MenuItem menuItem = menu.findItem(R.id.search);
    searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
    //设置搜索的事件
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
      @Override
      public boolean onQueryTextSubmit(String query) {
       Toast t = Toast.makeText(MainActivity.this, query, Toast.LENGTH_SHORT);
        t.setGravity(Gravity.TOP,0,0);
        t.show();
        return false;
      }
      @Override
      public boolean onQueryTextChange(String newText) {
        return false;
      }
    });
    //获取分享的菜单子组件
    MenuItem shareItem = menu.findItem(R.id.share);
    ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
    //通过setShareIntent调用getDefaultIntent()获取所有具有分享功能的App
    shareActionProvider.setShareIntent(getDefaultIntent());
    return super.onCreateOptionsMenu(menu);
  }
  //设置可以调用手机内所有可以分享图片的应用
  private Intent getDefaultIntent() {
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_SEND);
    //这里的类型可以按需求设置
    intent.setType("image/*");
    return intent;
  }
}

虽然用actionBar可以实现这些功能,但在各个安卓版本和定制Rom中的效果表现不一,导致严重的碎片化问题,所以Google在2015的IO大会上发布了系列的Material Design风格的控件。其中ToolBar是替代ActionBar的控件。后面我们也会简述ToolBar的简单用法。

以上所述是小编给大家介绍的Android中通过ActionBar为标题栏添加搜索及分享视窗,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# actionbar添加搜索  # android  # actionbar  # 搜索  # Android如何创建自定义ActionBar  # Android用ActionBar高仿微信主界面的实例代码  # Android菜单的定义及ActionBar的实现  # Android学习笔记之ActionBar Item用法分析  # Android编程之ActionBar Tabs用法实例分析  # Android3.0 ActionBar导航标题栏使用解析  # Android 活动条ActionBar的详解及实例代码  # Android  ActionBar控件操作使用详解  # 菜单项  # 栏中  # 是在  # 应用程序  # 提供一个  # 小编  # 要使  # 有一个  # 标题栏  # 如果你  # 也会  # 在此  # 你在  # 可以用  # 当你  # 但在  # 菜单中  # 要在  # 给大家  # 自定义 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 清除minerd进程的简单方法  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  如何选择可靠的免备案建站服务器?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  C++用Dijkstra(迪杰斯特拉)算法求最短路径  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  深圳网站制作平台,深圳市做网站好的公司有哪些?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  如何为不同团队 ID 动态生成多个非值班状态按钮  深圳网站制作的公司有哪些,dido官方网站?  用yum安装MySQLdb模块的步骤方法  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  javascript中的try catch异常捕获机制用法分析  网站制作企业,网站的banner和导航栏是指什么?  浅述节点的创建及常见功能的实现  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何在IIS管理器中快速创建并配置网站?  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  HTML 中如何正确使用模板变量为元素的 name 属性赋值  高端网站建设与定制开发一站式解决方案 中企动力  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  linux写shell需要注意的问题(必看)  Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  网站优化排名时,需要考虑哪些问题呢?  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  微信小程序 wx.uploadFile无法上传解决办法  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  Laravel怎么实现模型属性的自动加密  LinuxCD持续部署教程_自动发布与回滚机制  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  英语简历制作免费网站推荐,如何将简历翻译成英文?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  如何在 React 中条件性地遍历数组并渲染元素  EditPlus中的正则表达式 实战(1)  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  想要更高端的建设网站,这些原则一定要坚持!  ,在苏州找工作,上哪个网站比较好?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  Laravel Session怎么存储_Laravel Session驱动配置详解  如何快速搭建高效可靠的建站解决方案?  如何在Windows 2008云服务器安全搭建网站?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  如何在服务器上三步完成建站并提升流量?