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

还记得我写过的一篇 blog Android AlertDialog对话框自定义风格的另类实现,没错,这里就是要使用那篇 blog 中讲到的这个方法。

    public int getIdentifier(String name, String defType, String defPackage) {if (name == null) {throw new NullPointerException("name is null");}try {return Integer.parseInt(name);} catch (Exception e) {// Ignore}return mAssets.getResourceIdentifier(name, defType, defPackage);}

看到这个大家不会觉得陌生了吧! 
不过这个方法需要知道 ActionBar 控件的 id 名称,这里我就直接告诉大家是 ” action_bar_container”

    <android.support.v7.internal.widget.ActionBarContainerandroid:id="@+id/action_bar_container"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentTop="true"style="?attr/actionBarStyle"android:touchscreenBlocksFocus="true"android:gravity="top"><android.support.v7.widget.Toolbarandroid:id="@+id/action_bar"android:layout_width="match_parent"android:layout_height="wrap_content"app:navigationContentDescription="@string/abc_action_bar_up_description"style="?attr/toolbarStyle"/>

还是很容易找到的。 
所以,我们就能很轻易的拿到 ActionBar 的 View 
具体代码如下:

    private View getActionBarView(){View view = getWindow().getDecorView() ;int actionBarId  = getResources().getIdentifier("action_bar_container","id",getPackageName()) ;return view.findViewById(actionBarId) ;}

拿到了 View 之后我们能干嘛?来看两张图: 

ActionBar 颜色改变了,并且沿着 X轴旋转了一定角度

这。。。纵向 ActionBar,第一次见吧!

通过以上两副图,只是想说明一点,拿到了 ActionBar 的 View,我们就能灵活的控制 ActionBar,比如 Google Music 的显示和隐藏效果,下面就来看看怎么实现的。

先看动态图: 

这个效果是,当 RecyclerView 向上滑动 ActionBar 显示,向下滑动 ActionBar 隐藏,并且是随着滑动的距离来控制ActionBar 的移动距离。 
代码非常之简单

            @Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy);int transY = (int) (mActionBarView.getTranslationY() - dy);//控制 ActionBar 的移动距离不能超过边界transY = (int) clamp(transY,-mActionBarHeight,0);mActionBarView.setTranslationY(transY);}

但松手之后,还有一个动画需要处理,如果 ActionBar 的显示高度大于 ActionBar 高度的一半,则让它做全部显示动画,反之,则做隐藏动画。

@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);if (newState == RecyclerView.SCROLL_STATE_IDLE){checkAnimation() ;}
}
private void checkAnimation(){int transY = (int)mActionBarView.getTranslationY();if (transY != 0|| transY != -mActionBarHeight){startAnimation() ;}
}private void startAnimation(){float [] value = new float[2] ;value[0] = mActionBarView.getTranslationY();if (value[0] > -mActionBarHeight/2.0f){value[1] = 0 ;}else {value[1] = - mActionBarHeight ;}ObjectAnimator animator =ObjectAnimator.ofFloat(MainActivity.this,"transY",value) ;animator.setDuration(150) ;animator.start();}

这里主要是一些动画和平移的处理,如果不熟悉可以把源码下载下来分析。

总结:

ActionBar 的 View获取主要还是借助以下这个方法来获取

public int getIdentifier(String name, String defType, String defPackage)

需要对AcitonBar 的资源 id 的名称了解,这个可以通过查看源码知道。

源码下载地址:我是代码

转载于:https://www.cnblogs.com/Free-Thinker/p/4616930.html

如何灵活使用 ActionBar, Google 音乐ActionBar 隐藏和显示效果相关推荐

  1. android actionbar分割线,Android ActionBar和ToolBar的使用

    前言自android5.0开始,AppCompatActivity代替ActionBarActivity,而且ToolBar也代替了ActionBar,下面就是ActionBar和ToolBar的使用 ...

  2. android开发actionbar,详解Android ActionBar之一:ActionBar概述与创建

    前面一个系列中讲的是Fragment的内容,Android 3.0中除Fragment外,Action Bar同样也是一个很重要的知识点.我们经常使用Action Bar来替代传统的标题栏.如果是An ...

  3. Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色...

    android:orientation="vertical"(AndroidStudio不提示,这个要记住了) 昨天好不容易把ActionBar从溢出菜单overflow中弄出来了 ...

  4. Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar

    导言- 添加ActionBar 原文地址:http://android.xsoftlab.net/training/basics/actionbar/index.html ActionBar是很多重要 ...

  5. Google Chrome 浏览器——隐藏功能及快捷键

    Google Chrome 浏览器 Google Chrome是一款由Google公司开发的网页浏览器,该浏览器基于其他开源软件撰写,包括WebKit,目标是提升稳定性.速度和安全性,并创造出简单且有 ...

  6. Google 音乐播放器

    <script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.cr ...

  7. 获取Google音乐的详细信息(方便对Google音乐批量下载)

    Google音乐都是正版音乐, 不像百度全部都是盗链, 而且死链也多. 但有一个麻烦就是要下载Google音乐的时候得一个一个的点击下载链接, 进入下载页面再点"下载", 才能下载 ...

  8. Google 音乐的体验

    Google 音乐的体验 今天使用了一下谷歌的音乐搜索频道,感觉挺不错的,下面写一点心得吧. 下面是一直用首页截图.简洁,很符合谷歌的风格. 下图是歌曲排行榜,大家看左边的音乐类型,直接可以到达你想去 ...

  9. 让Google音乐替你选歌~

    Google音乐帮你挑歌:http://www.google.cn/music/songscreener 本文转自黄聪博客园博客,原文链接http://www.cnblogs.com/huangcon ...

最新文章

  1. 一劳永逸关闭Windwos默认共享
  2. Uber致人死亡或为自动驾驶肇事责任 没有判例可循
  3. jupyter notebook运行出错:ModuleNotFoundError: No module named ‘keras‘ 解决办法
  4. gluPerspective和gluLookAt的关系
  5. ML之Clustering之H-clustering:Hierarchical clustering算法相关论文、主要思路、关键步骤、代码实现等相关配图之详细攻略
  6. 关于maven仓库中的_remote.repositories
  7. 【数学基础】正态分布为什么如此常见?
  8. IntelliJ IDEA 2019 激活码 | 全产品 | 跨平台 | Goland | PhpStorm | Rider | CentOS | Windows
  9. 网络编程t-io介绍
  10. dos, echo写文件不追加回车的方法
  11. HeadFirstJava——6_Java API
  12. 笨方法学python 习题31
  13. 全国多省市遭暴雪袭击!这些路段交通受阻!
  14. 以汨罗命名的鸿蒙网,汨罗千年古镇“新市”考
  15. 在SSH会话中如何实现 X11 Forwarding
  16. 自定义插入页面标签以及实现类似通讯录的首字母搜索
  17. Java设计一个测桃花模块_20145209刘一阳《JAVA程序设计》第十五周补充测试
  18. e.g., malformed request syntax, invalid request message framing, or deceptive request routing)
  19. c# 屏幕取词的方法
  20. 开放源码易语言摄像头拍照自动重命名拍学籍照和证件照

热门文章

  1. 数据中心的容器操作系统--k8s理解
  2. 网络协议:TCP可靠传输
  3. (14)Verilog数据类型-基本语法(二)(第3天)
  4. python列表keys函数_字典常用函数(clear、get、items、keys、values、pop)
  5. python的字符串包括哪些_python怎么判断字符串是否包含某些字符
  6. STM32官方固件库
  7. SysLink UserGuide
  8. 【数据结构】----C语言实现栈操作
  9. Java学习日报—Swagger介绍 与 布隆过滤器详解—2021/12/01
  10. 7大排序算法详解+java实现