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

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.ActionBarContainer
            android: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.Toolbar
                android: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 的移动距离。 
代码非常之简单

            @Override
            public 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 的名称了解,这个可以通过查看源码知道。

源码下载地址:我是代码

时间: 2024-10-05 04:58:08

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

详解Android ActionBar之一:ActionBar概述与创建

前面一个系列中讲的是Fragment的内容,Android 3.0中除Fragment外,Action Bar同样也是一个很重要的知识点.我们经常使用Action Bar来替代传统的标题栏.如果是Android平板设备的话,屏幕越大,通过Action Bar设计的标题可以展示的内容越丰富,操作更加便捷. Action Bar主要功能包含: 1. 显示选项菜单. 2. 提供标签页的切换方式的导航功能,可以切换多个fragment. 3. 提供下拉的导航条目. 4. 提供交互式活动视图代替选项条目.

获取Google音乐的具体信息(方便对Google音乐批量下载)

Google音乐都是正版音乐, 不像百度所有都是盗链, 并且死链也多. 但有一个麻烦就是要下载Google音乐的时候得一个一个的点击下载链接, 进入下载页面再点"下载", 才干下载, 为此写了这个读取Google音乐具体信息(当然包含下载地址)的工具类, 仅仅要略微加功(将输出结果保存为一个HTML文件)即能够用迅雷的"下载所有链接" 进行批量下载. GoogleMusicUtil.java package com.hmw.web; import java.io.B

Android ActionBar应用一:ActionBar返回任意页面和搜索栏初探

转载请注明出处:http://blog.csdn.net/cyp331203/article/details/44922863 Action Bar是app应用顶部的一个方形区域,不一定总会显示(如全屏Theme时),它属于窗口的一部分,有点类似于windows的窗口的标题栏,如下图所示: ActionBar简要介绍: 如上图所示,标题栏一般会有三类按钮: 1.可以称为home区,这里有一个标识app的按钮,这个按钮默认不被激活,图片显示默认跟app的图标一致 2.可以称为按钮区,显示在按钮区的

jQuery DIV 隐藏与显示效果

 函数 描述 $(selector).hide() 隐藏被选元素 $(selector).show() 显示被选元素 $(selector).toggle() 切换(在隐藏与显示之间)被选元素 $(selector).slideDown() 向下滑动(显示)被选元素 $(selector).slideUp() 向上滑动(隐藏)被选元素 $(selector).slideToggle() 对被选元素切换向上滑动和向下滑动 $(selector).fadeIn() 淡入被选元素 $(selector

Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持

在Google官方Android设计指南中(链接:http://www.apkbus.com/design/get-started/ui-overview.html)有一个新特性就是自我标识,也就是宣传自己,所以很多应用现在也自然的使用ActionBar并提供自己的logo. 微信的应用: Google的Android设计指南中是这样说的:应用的 启动图标 作为启动应用的入口是展示 logo 的最佳场所.你也可以将启动图标放置在 操作栏 上,从而保证在应用内的所有页面上都能看到它. 在使用Act

ActionBar隐藏修改图标和标题

有时候在一些子页面或者内容页面,不需要显示ActionBar的标题栏图标.可用如下方式进行设置. 首先获取到ActionBar对象 ActionBar actionBar=getActionBar(); 使用android:logo属性.不像方方正正的icon,logo的图像不会有任何宽度限制. logo图像典型的给你的APP提供品牌.当你有Logo的时候,你可以隐藏label. 默认的,ActionBar使用Activity的android:icon属性,还有一致的android:label属

Android中隐藏ActionBar的方法

有的时候Activity的顶部我们需要自定义样式,这个时候就需要隐藏ActionBar.两种方式: 1.在配置文件中通过android:theme=""属性隐藏: <activity android:name=".MainActivity" android:label="@string/app_name" <!-- 这行代码便可以隐藏ActionBar --> android:theme="@android:style

打造自己想要风格的 ActionBar

很久没更新 blog 了,最近在赶一个项目,所以时间特别紧,自己闲暇的时间也就少了许多,最近我的好朋友们一直在群里喊,杀!杀!杀!也都抽不出时间陪他们玩!今天周末,终于可以放松一下了,先更新 blog!^V^~~~~. 我们知道 Android ActionBar 的功能很强大,经过 Google 的改良后,使用起来页很灵活和便捷,但是!再好的东西都有它所不能及的一面,就像在豪华的别墅都应该有一个小小的 WC,就像-都有-,这里就不往下了.回到 ActionBar,有哪些它无法做到呢? 我们还是

ActionBar 的应用

转载:http://blog.csdn.net/yuxlong2010 作为Android 3.0之后引入的新的对象,ActionBar可以说是一个方便快捷的导航神器.它可以作为活动的标题,突出活动的一些关键操作(如“搜索”.“创建”.“共享”等).作为菜单的灵活使用,还可以实现类似TabWidget的标签功能以及下拉导航的功能,系统能够很好根据不同的屏幕配置来适应ActionBar的外观,配合起Fragemtn可谓是十分强大. 那么,对于今天的主角ActionBar怎么去添加?在Android