Android ToolBar控件详解及实例

发布时间 - 2026-01-11 00:13:32    点击率:

ToolBar控件详解

在Activity中添加ToolBar

1.添加库

dependencies {
  ...
  compile "com.android.support:appcompat-v7:18.0.+"
}

2.Activity要继承AppCompatActivity

3.设置主题

使用ToolBar,要将系统默认的ActionBar隐藏掉

<application
  android:theme="@style/Theme.AppCompat.Light.NoActionBar"
  />

4.在XML添加ToolBar布局

<android.support.v7.widget.Toolbar
  android:id="@+id/my_toolbar"
  android:layout_width="match_parent"
  android:layout_height="?attr/actionBarSize"
  android:background="?attr/colorPrimary"
  android:elevation="4dp"
  android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
  app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

Material Design specification 建议设置 elevation 为 4dp

Toolbar放在Activity的顶部(等于废话)

5.设置ToolBar

在Activity的onCreate()方法中,调用setSupportActionBar()方法,把我们的ToolBar对象传递进去,将我们xml中添加的ToolBar设置为我们这个Activity页面的App Bar。

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);
  Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
  setSupportActionBar(myToolbar);
  }

现在,我们的页面中,应该就会有一个App Bar了,默认情况下,这个App Bar只会显示一个App的名字和一个带有下拉选项的按钮,也可以在App Bar上添加更多的选项按钮

添加并处理一个Action

ToolBar允许在上面添加操作按钮,但是因为ToolBar上空间是有限的,如果一个程序有太多的Action,那么可以将Action添加到下拉菜单中,而不显示在ToolBar上

添加一个Action按钮

可以在XML文件中定义所有我们想添加的操作按钮和下拉列表中的行为,如果想要添加Action,可以在 res/目录下创建一个新的XML文件,添加元素。例如这样

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

  <!-- "Mark Favorite", should appear as action button if possible -->
  <item
    android:id="@+id/action_favorite"
    android:icon="@drawable/ic_favorite_black_48dp"
    android:title="@string/action_favorite"
    app:showAsAction="ifRoom"/>

  <!-- Settings, should always be in the overflow -->
  <item android:id="@+id/action_settings"
     android:title="@string/action_settings"
     app:showAsAction="never"/>

</menu>

App:showAsAction 属性是用来设置Action显示在哪,如果我们设置 app:showAsAction =”ifRoom”(示例中最常用的一种方式) ,这个Action将显示在ToolBar上,如果ToolBar上没有足够的控件,则显示在下拉菜单中。如果在程序中设置为 app:showAsAction=”never”,那么这个Action将永远显示在下拉列表中,而不会显示在ToolBar上。
响应操作(回调)

当用户选择了一个Action后,系统会回调 onOptionsItemSelected() 方法并传递 MenuItem 对象,在 onOptionsItemSelected() 的实现中,调用 MenuItem.getItemId() 方法来确定按下了哪个项目。返回的 ID 与您在相应的 元素 Android: id 属性中声明的值匹配。

例如下面

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
    case R.id.action_settings:
      // User chose the "Settings" item, show the app settings UI...
      return true;

    case R.id.action_favorite:
      // User chose the "Favorite" action, mark the current item
      // as a favorite...
      return true;

    default:
      // If we got here, the user's action was not recognized.
      // Invoke the superclass to handle it.
      return super.onOptionsItemSelected(item);

  }
}

添加一个回到主界面的按钮

应用为了使用户可以方便的回到主界面,ToolBar可以添加一个按钮,直接返回到指定的主界面。

声明主界面(父界面)

需要在清单文件中通过设置 android: parentActivityName 属性声明,如果要支持旧版本的Android设备,需要定义 ,类似这样:

<application ... >
  ...

  <!-- The main/home activity (it has no parent activity) -->

  <activity
    android:name="com.example.myfirstapp.MainActivity" ...>
    ...
  </activity>

  <!-- A child of the main activity -->
  <activity
    android:name="com.example.myfirstapp.MyChildActivity"
    android:label="@string/title_activity_child"
    android:parentActivityName="com.example.myfirstapp.MainActivity" >

    <!-- Parent activity meta-data to support 4.0 and lower -->
    <meta-data
      android:name="android.support.PARENT_ACTIVITY"
      android:value="com.example.myfirstapp.MainActivity" />
  </activity>
</application>

使用返回按钮

若要使用返回的按钮,需要调用setDisplayHomeAsUpEnabled()方法,类似这样:

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

  // my_child_toolbar is defined in the layout file
  Toolbar myChildToolbar =
    (Toolbar) findViewById(R.id.my_child_toolbar);
  setSupportActionBar(myChildToolbar);

  // Get a support ActionBar corresponding to this toolbar
  ActionBar ab = getSupportActionBar();

  // Enable the Up button
  ab.setDisplayHomeAsUpEnabled(true);
}

添加Action Views

和上面 添加并处理一个Action 类似,只不过设置 showAsAction 为 “ifRoom|collapseActionView” 或者 “never|collapseActionView” 就可以了,类似这样

<item android:id="@+id/action_search"
   android:title="@string/action_search"
   android:icon="@drawable/ic_search"
   app:showAsAction="ifRoom|collapseActionView"
   app:actionViewClass="android.support.v7.widget.SearchView" />

这里我们添加的是一个带有搜索功能的Search按钮,如果我们要自定义一个自己的按钮,不添加 actionViewClass 即可

如果想要配置这个Action,可以在 onCreateOptionsMenu() 的回调里通过 getActionView() 获取到Search对象,类似这样:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main_activity_actions, menu);

  MenuItem searchItem = menu.findItem(R.id.action_search);
  SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);

  // Configure the search info and add any event listeners...

  return super.onCreateOptionsMenu(menu);6 
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # ToolBar控件  # ToolBar控件详解  # ToolBar  # android顶部(toolbar)搜索框实现代码  # Android顶部(toolbar)搜索框实现的实例详解  # Android中ActionBar和ToolBar添加返回箭头的实例代码  # Android ToolBar 修改边距的实现方法  # Android动态修改ToolBar的Menu菜单示例  # Android折叠式Toolbar使用完全解析(CollapsingToolbarLayout)  # Android自定义Toolbar使用方法详解  # Android基于Toolbar实现顶部标题栏及后退键  # 回调  # 设置为  # 自己的  # 的是  # 就会  # 放在  # 太多  # 列表中  # 菜单中  # 而不  # 只会  # 希望能  # 自定义  # 您在  # 按下  # 要将  # 在上面  # 谢谢大家  # 方法来  # 若要 


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


相关推荐: 动图在线制作网站有哪些,滑动动图图集怎么做?  七夕网站制作视频,七夕大促活动怎么报名?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何在局域网内绑定自建网站域名?  Laravel如何实现多对多模型关联?(Eloquent教程)  再谈Python中的字符串与字符编码(推荐)  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何撰写建站申请书?关键要点有哪些?  利用vue写todolist单页应用  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何用腾讯建站主机快速创建免费网站?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  Laravel如何创建自定义Artisan命令?(代码示例)  Laravel如何实现用户密码重置功能?(完整流程代码)  公司网站制作需要多少钱,找人做公司网站需要多少钱?  如何在搬瓦工VPS快速搭建网站?  如何快速打造个性化非模板自助建站?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  香港网站服务器数量如何影响SEO优化效果?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  制作公司内部网站有哪些,内网如何建网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集  如何将凡科建站内容保存为本地文件?  Linux网络带宽限制_tc配置实践解析【教程】  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何在阿里云香港服务器快速搭建网站?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  英语简历制作免费网站推荐,如何将简历翻译成英文?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel如何自定义分页视图?(Pagination示例)  Python数据仓库与ETL构建实战_Airflow调度流程详解  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  iOS验证手机号的正则表达式  Win11搜索不到蓝牙耳机怎么办 Win11蓝牙驱动更新修复【详解】  Bootstrap整体框架之CSS12栅格系统  javascript基于原型链的继承及call和apply函数用法分析  Laravel如何自定义错误页面(404, 500)?(代码示例)  如何快速搭建个人网站并优化SEO?  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  phpredis提高消息队列的实时性方法(推荐)  Laravel用户密码怎么加密_Laravel Hash门面使用教程