ActionBar的简易使用(一)

Toolbar使用——代替ActionBar最佳实践 一、引入Toolbar在介绍ToolBar之前,我们先回忆一下ActionBar。相信下面这个界面大家都已经烂熟于心了,没错,在我们每次最初创建项目的时候,Android Studio会为我们创建出这样最初始的界面效果:除了一个“HelloWorld”的TextView,就是上面引人注目的蓝色条条——ActionBar了。大家之前在做开发的时候,应该借助ActionBar实现不少界面效果:在Act... 阅读详情

在android3.0以后,谷歌为了统一全局UI界面,推出的新导航栏功能,它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航等一些通用功能。使得用户在使用任意大小的硬件以及任意软件都能自适应及方便操作。如下图所示:

其中,1为actionbar的图标,2为两个actionBar按钮,3为overflow按钮

由于Action Bar是在3.0以后的版本中加入的,如果想在2.x的版本里使用ActionBar的话则需要引入Support Library_v7,不过3.0之前版本的市场占有率已经非常小了,这里简单起见我们就不再考虑去做向下兼容,而是只考虑4.0以上版本的用法。


显示和取消ActionBar:

很简单,在只需要在AndroidManifest.xml中指定Application或Activity的theme是Theme.Holo或其子类就可以了,而使用Eclipse创建的项目自动就会将Application的theme指定成Theme.Holo,所以ActionBar默认都是显示出来的。新建一个空项目并运行,效果如下图所示:

那么问题来了,因为我的手机有物理菜单键,ActionBar最右边的overflow按钮不见了!那么此时我们如何查看隐藏在overflow中的Action按钮呢?

在不同手机上竟然显示了不同的界面,而且操作方法也完全不一样,这样会给用户一种非常不习惯的感觉。话说Google为什么要把ActionBar的overflow设计成这样我也不太理解,但是我们还是有办法改变这一默认行为的。
实际上,在ViewConfiguration这个类中有一个叫做sHasPermanentMenuKey的静态变量,系统就是根据这个变量的值来判断手机有没有物理Menu键的。当然这是一个内部变量,我们无法直接访问它,但是可以通过反射的方式修改它的值,让它永远为false就可以了,代码如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......
setOverflowShowingAlways();
}
private void setOverflowShowingAlways() {  
   try {  
       ViewConfiguration config = ViewConfiguration.get(this);  
       Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");  
       menuKeyField.setAccessible(true);  
       menuKeyField.setBoolean(config, false);  
   } catch (Exception e) {  
       e.printStackTrace();  
   }  
}  

OK,问题解决

接下来,如何取消actionbar呢?
想要移除ActionBar的话通常有两种方式,一是将theme指定成Theme.Holo.NoActionBar,表示使用一个不包含ActionBar的主题,二是在Activity中调用以下方法:
ActionBar action = getActionBar();
action.hide();

修改actionBar的图标和标题

默认情况下,系统会使用<application>或者<activity>中icon属性指定的图片来作为ActionBar的图标,当我们要改变时,可以使用如下方法定义
android:theme="@android:style/Theme.Holo.Light" 
        android:logo="@drawable/android">

ActionBar action = getActionBar();
//action.hide();
action.setTitle(“示例”);
//action.setTitle(resId);
也可使用android:label=""修改


在actionBar上添加按钮
ActionBar还可以根据应用程序当前的功能来提供与其相关的Action按钮,这些按钮都会以图标或文字的形式直接显示在ActionBar上。当然,如果按钮过多,ActionBar上显示不完,多出的一些按钮可以隐藏在overflow里面(最右边的三个点就是overflow按钮),点击一下overflow按钮就可以看到全部的Action按钮了。
当Activity启动的时候,系统会调用Activity的onCreateOptionsMenu()方法来取出所有的Action按钮,我们只需要在这个方法中去加载一个menu资源,并把所有的Action按钮都定义在资源文件里面就可以了。代码如下所示:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >


    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
<item
        android:id="@+id/action_set"
        android:icon="@drawable/set"
        android:showAsAction="always"
        android:title="@string/set"
        />
<item
        android:orderInCategory="100"
        android:showAsAction="always"
        android:title="@string/action_settings"/>
</menu>
共三种:never,always,ifRoom

重写Activity的onCreateOptionsMenu()方法,代码如下所示:
@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);
return true;
}

  • 当ActionBar中的剩余空间不足的时候,如果Action按钮指定的showAsAction属性是ifRoom的话,该Action按钮就会出现在overflow当中,此时就只有title能够显示了。
  • 如果Action按钮在ActionBar中显示,用户可能通过长按该Action按钮的方式来查看到title的内容。

点击事件:
系统会调用Activity的onOptionsItemSelected()方法,通过方法传入的MenuItem参数,我们可以调用它的getItemId()方法和menu资源中的id进行比较,从而辨别出用户点击的是哪一个Action按钮。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_settings:
//do something
return true;
default:
return super.onOptionsItemSelected(item);
}
}

通过Action Bar图标进行导航

A界面展示了一个列表,点击某一项之后进入了B界面,这时B界面就应该启用ActionBar图标导航功能,这样就可以回到A界面。
我们可以通过调用setDisplayHomeAsUpEnabled()方法来启用ActionBar图标导航功能
ActionBar action = getActionBar();
//action.hide();
action.setTitle("示例");
action.setDisplayHomeAsUpEnabled(true);
可以看到如下:
多出了一个向左的箭头,一般使用情况是finish();
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
switch (item.getItemId()) {
case R.id.action_settings:

return true;
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
点击ActionBar图标的时候,系统同样会调用onOptionsItemSelected()方法,并且此时的itemId是android.R.id.home,所以finish()方法也就是加在这里。此时的
导航与Back键功能是一样的,但是并不等于Back键,这个以后再说

修改actionBar的背景色与文字颜色
这里要使用Style如下:
<style name="my_theme" parent="android:Theme.Holo.Light">
        <item name="android:actionMenuTextColor">#FF0000</item><!-- 设置文字颜色 -->
        <item name="android:actionBarStyle">@style/my_actionbar_style</item>
    </style>


    <style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">#ffff00</item><!-- 设置背景颜色 -->
    </style>

android:actionMenuTextColor设置文字的颜色。
看到这想必大家也已经想到了,设置背景渐变色的方法其实非常简单:
设置actionbar_gradient_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle">
        
    <!--
android:startColor和android:endColor分别为起始和结束颜色
android:angle是渐变角度,必须为45的整数倍。
线性渐变:
 android:type="linear" 
 径向渐变 :
 android:type="radial"
 径向渐变需要指定半径如: android:gradientRadius="50"  


    -->
<gradient
       android:angle="270"
       android:endColor="#ff8c00"
       android:startColor="#FFFFFF"
       android:type="linear" />
     
</shape>

再在上面的style中,<style name="my_actionbar_style" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">@drawable/actionbar_gradient_bg</item><!-- 设置背景颜色 -->
    </style>


OK,今天就到这吧,第一次发博客,简直要了我的老命,嘿嘿,这次只说了下actionBar的一些简单应用,别的留到下一篇吧。希望我有那个动力呀。

如何灵活使用 ActionBar, Google 音乐ActionBar 隐藏和显示效果 ActionBar 的历史这里就不介绍了,相信大家都清楚;在一个 app 中,如果 ActionBar 运用的好,那么将会省去大量的代码,而且整个 app 效果也相当不错,大家有兴趣可以下载 google music 这款 app 看看,界面看起来还是相当舒服的; ok,这里教大家一招快捷方便使用 ActionBar 的方法 阅读详情

相关推荐

5分钟搞懂基因组规模代谢网络(GSMM):从数据库选择到模型构建全流程

本文详细解析基因组规模代谢网络(GSMM)构建的全流程,从数据库选择到模型优化。重点介绍MetaCyc、BiGG等主流数据库的黄金三角评估法则,对比自上而下与自下而上两种建模方法,并提供模型修剪、仿真优化的实用技巧与避坑指南,帮助研究者高效构建精准代谢网络模型。

weixin_30872157的博客 135

Android技能之-setSupportActionBar(toolbar)的那点事

伴随着Android的主题(theme)越来越多之后,记清如何使用以及怎么使用、使用后的效果如何,并非一件短时间里就能非常熟练的掌握好,那么关于主题中的ActionBar,今天这边做一个曾遇到的冲突记录 当我们选择创建一个Empty Activity的App项目时,默认生成的AndroidManifest.xml内容如下 <?xml version="1.0" encoding="utf...

叫我Aso的专栏 1万+

Vivado实战:如何用BUFGMUX_CTRL实现FPGA双时钟热切换(附时序约束模板)

本文详细介绍了如何使用Xilinx FPGA中的BUFGMUX_CTRL原语实现双时钟热切换的工业级解决方案。通过分析BUFGMUX_CTRL的核心机制、PCB布局约束和电源噪声抑制方法,提供Vivado实现全流程和时序约束模板,帮助工程师在工业自动化、车载电子等场景中提升系统可靠性。

weixin_29186249的博客 576

Android动作栏ActionBar全解析

摘要 Action Bar 操作栏是一个窗口功能用于确定应用程序和用户的位置,并提供给用户操作和导航模式。如果需要突出当前用户的操作或导航,应该使用操作栏,因为操作栏为用户提供了一个一致的接口,这个接口跨应用程序和系统,并且不同尺寸的屏幕适配操作栏的外观。 Action Bar 操作栏是一个窗口功能用于确定应用程序和用户的位置,并提供给用户操作和导航模式。如果需要突出当前用户的操作

duanyu218的专栏 713

autoDL算力云装Xinference[坑与步骤]

在页面直接点击下载会出现下着下载进度条消失,试了几次才出现这个报错,现在我们就继续安装缺少的包吧。这一步成功绕开了系统盘空间限制。先租用一个合适的服务器,建议不要选最新版本,跟我选的一样即可,不然后面会出现。最近在 AutoDL 上尝试部署。🚫 不要直接使用以下命令。点击下面链接即可打开。

ngadminq的博客 2382

别再乱拖了!Godot 4.x 场景编辑器的7个隐藏操作技巧(附快捷键清单)

本文揭示了Godot 4.x场景编辑器的7个隐藏操作技巧,包括智能对齐、轴心点应用、多节点批量操作等,帮助开发者提升游戏开发效率。特别介绍了坐标系切换和自定义快捷键等实用功能,适用于处理复杂场景和团队协作。

weixin_29534421的博客 361

Material_Design

Android Material Design 今天就来谈谈 android 给我们提供的 Material 库的好用又好看的组件 ToolBar ToolBar这个是来替代ActionBar的 具体的做法很简单: 将主题的ActionBar设置为没有 然后在需要ToolBar的地方 放在他的布局文件里 在他的创建视图的时候 调用 **setSupportActionBar(binding.toolbar) **这个方法就可以了 传入的就是在布局文件里定义的ToolBar 看代码

Pandaer杂货铺 2555

AMD显卡跑Ollama大模型?手把手教你搞定Windows下GPU识别与加速(以RX 9600XT为例)

本文详细指导如何在Windows系统下使用AMD显卡(如RX 9600XT)运行Ollama大模型,解决GPU识别与加速问题。通过获取非官方Ollama版本、替换ROCm库文件等步骤,实现高效的GPU加速推理,提升大语言模型的运行效率。

weixin_28707365的博客 481

setSupportActionBar添加Toolbar后系统之后如何创建Menu

在正常的开发中我们会使用 setSupportActionBar(Toolbar toolbar)方法设置Toolbar,通过Toolbar我们可以添加Menu等菜单操作。那么setSupportActionBar方法到底是如何设置了ToolBar并且关联到Menu的? 首先从setSupportActionBar(mToolbar)看起。首先这个方法调用到了this.getDelegate()...

哈哈龙的博客 1140

Python 实现 傅里叶级数 对 函数拟合 并绘图

好记性不如烂笔头 目录傅里叶级数变换原理代码实现效果图 傅里叶级数变换原理 原理:待续… 傅里叶级数变换公式: 代码实现 本次实现的是符号函数的拟合: 注:若要实现其他函数的拟合,修改程序中 fx 的表达式即可 """ 傅里叶级数""" import sympy as sym import numpy as np import matplotlib.pyplot as plt N = 8 # 拟合的阶数 L = sym.pi # 周期的一半 n, x = sym.symbols('n x')

qq_41676952的博客 1万+

从CT扫描到3D模型:手把手教你用NII文件在3D Slicer中重建脊柱(附Verse数据集实战)

本文详细介绍了如何利用NII文件在3D Slicer中从CT扫描数据重建脊柱3D模型的全流程,包括环境配置、数据获取、方向校准、结构分割和模型优化等关键步骤。通过Verse数据集实战演示,帮助医学从业者快速掌握医学图像处理技术,提升临床诊疗与教学效率。

weixin_42651281的博客 203

Android Studio SetSupportActionBar方法无法引入ToolBar对象的问题呈现及解决方法

项目场景: 今天在使用ToolBar,在完成ToolBar的初始化操作以后想要使用SetSupportActionBar使得自己设置的ToolBar填充进ActionBar的位置。 问题描述: 但是,当使用SetSupportAction方法时,发现引入的ToolBar对象参数始终报错。 原因分析: 通过对setSupportActionBar源码查看分析 public void setSupportActionBar(@Nullable Toolbar toolbar) { g

qjyws的博客 1669

UNet 改进(39):结合残差连接与CBAM注意力机制的unet模型

本文提出了一种改进的UNet架构,通过融合残差连接和CBAM注意力机制来增强医学图像分割性能。该网络保留UNet的U形结构,但将基础模块替换为ResidualBlock和CBAM的组合:残差块通过快捷连接解决梯度消失问题,CBAM模块结合通道和空间注意力机制突出重要特征。整体架构采用编码器-解码器设计,包含5个下采样和上采样阶段,通过跳跃连接融合多尺度特征。实验表明,这种改进显著提升了原始UNet的性能,特别适用于需要精细边界的医学图像分割任务。

2401_82355416的博客 1017

Android ActionBar使用

Android ActionBar使用

zq2114522的专栏 2528

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android ActionBar应用一:ActionBar返回任意页面和顶部搜索栏实现

使用ActionBar实现返回任意界面和顶部搜索功能

苦咖啡的自留地 5089

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ActionBar和Toolbar的基础使用

前言 ActionBar是Activity开发的标配,但是从5.0开始逐渐由Toolbar取代,主要因为Toolbar使用方式更加简单也更容易定制。为了能够更好的理解和使用Toolbar,有必要先对Actionbar的功能做深入的了解。这里简单使用ActionBar实现Tab切换效果,然后在用Toolbar来替换实现。 实现效果 ActionBar实现 ActionBar的...

xingzhong128的博客 7875

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android中活动条ActionBar的详细使用

图一 图二 图三 图四 图五 ActionBar其提供的功能总结 图一使用ActionBar显示选项菜单项 menu_mainxml代码 启用程序图标导航 如何添加Action View 图二Activity代码区 menu_mainxml代码 clockxml 图三使用ActionBar实现Tab导航 创建ActionBar实现Tab导航步骤 MainActivity代码

aserbao的博客 2万+

Android ActionBar 使用总结

ActionBar 的使用说明

Siobhan的专栏 755

ActionBar的使用以及隐藏

1、ActionBar的简介 ActionBar位于Activity的顶部,可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。 ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用http://actionbarsherlock.com 或使用Suppor

Charles的博客 1万+

ActionBar setDisplayOptions 使用详解

Android ActionBar setDisplayOptions 使用详解 先来看看官方文档的说明 setDisplayOptions setDisplayOptions Added in API level 11 ActionBar 提供了下面几种模式,来设...

dai的博客 1925

ActionBar的详细使用

ActonBar介绍      ActionBar取代了传统的标题栏(title),其在activity位置就是title原有的位置,在activity的顶部。ActionBar上默认情况下包括了应用(app)的logo,logo的位置在ActionBar的左侧,紧挨在logo右侧的是activity的标题(title)。在ActionBar的右侧,可以是在选项菜单(options menu

上帝派来的逗比 1093

ToolBar代替Actionbar在AppCompatActivity的使用

新api推荐带ActionBar的Activity,继承AppCompatActivity 处理标题栏导入项目工具包。兼容包: compile 'com.android.support:appcompat-v7:23.3.0'compile 'com.android.support:support-v13:23.3.0'1 .需要给Activity设置主题 无Actionbar即可 andr...

NELA的博客 1万+

安卓开发ActionBar的使用

ActionBar是3.0之后出现的控件,取代menu,显示在标题栏位置。 通过getActionBar()得到对象。 1.普通ActionBar 创建方式与Menu(xml创建)一样,不过item中需要设定android:showAsAction属性,不设定就是默认never,item将为menu的item,选择always或者ifRoom将为ActionBar。

Mr.U爱学习 800

Android ActionBar的使用

一、显示和隐藏Action Bar 要使用Action Bar的全部特性,最小SDK需11以上。 查看最小sdk的方法:Gradle.Scripts中build.gradle(app)中的minSdkVersion 在MainActivity.java文件中获取当前的Action Bar: //获取ActionBar对象 final ActionBar actionBar=getS...

一只蒻蒻的博客 418

Adnroid ActionBar 各种用法

一. 基础用法-显示和隐藏 1. 在xml中显示活隐藏 如果你不想要Action bar,把Activity的主题设置为Theme.Holo.NoActionBar就可以了 2. 在Activity中显示活隐藏 先得到Actionbar对象,再对其进行操作:show()或者hide() ActionBar actionBar = getActionBar(); act

琪花亿草 7777
下一篇: 深渊巨坑!关于android-N后多语言切换
ApkCore
博客等级 码龄12年 8粉丝 24原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值