Support Library 25.0.0 更新讲解

作者: FullStack | 来源:发表于2016-10-20 15:50 被阅读6741次

    Support Library 25.0.0

    伴随着Android 7.1(API 25)的的发布,一系列相关的开发工具与套件也一起更新了,包括Android Studio 2.2.2与Support Library 25.0.0。其中AS的更新包括日常的bug修复与性能提升,还有对7.1的支持。而Support包的更新如下:

    Important changes

    • ContextCompat的构造方法变为protected
    • ActivityCompat的构造方法变为protected
    • ActivityCompatgetReferer(Activity)方法变为static
    • 删除方法android.support.design.widget.CoordinatorLayout.Behavior.isDirty(CoordinatorLayout, V)
    • 删除方法android.support.v4.media.session.MediaSessionCompat.obtain(Context, Object)
    • 删除方法android.support.v4.media.session.MediaSessionCompat.QueueItem.obtain(Object)
    • 删除方法android.support.v7.widget.Space,应当使用android.support.v4.widget.Space.(作者注:在布局需要空白View时很高效)

    New APIs

    • 新增android.support.design.widget.BottomNavigationView类(更新的主角),实现了Material Design中的bottom navigation设计样式,就是我们常见的底部tab栏
    设计标准
    • 新增android.support.v13.view.inputmethod包,其中的相关类实现了在API 13时引入的android.view.inputmethod.InputConnection特性

    • 新增android.v7.widget.RecyclerView.DividerItemDecoration类,提供RecyclerView分割线的一种基础实现,目前只支持LinearLayoutManager的横向和纵向布局

    • 将API 24中引入的自定义Notification布局的相关类加入到兼容包中,即DecoratedCustomViewStyleDecoratedMediaCustomViewStyle

    功能预览

    Screenshot

    作者第一时间尝试了其中的部分新API,交互效果真的很棒,建议运行demo查看细节!下面大概说下使用方式:
    首先在布局中引入BottomNavigationView,

    <android.support.design.widget.BottomNavigationView
            android:id="@+id/navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:background="@color/colorPrimary"
            design:itemIconTint="@color/item_text_color"
            design:itemTextColor="@color/item_text_color"
            design:menu="@menu/menu_navigation"/>
    

    可以看到使用了design的三个自定义attr,menu是用来指定tab栏中的各个tab的,官方说tab数量应该介于3个到5个之间,所以这里以3个item为例,测试menu如下

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/item1"
            android:checked="true"
            android:icon="@drawable/ic_mail_outline_black_24dp"
            android:title="Message"/>
    
        <item
            android:id="@+id/item2"
            android:icon="@drawable/ic_call_black_24dp"
            android:title="Call"/>
    
        <item
            android:id="@+id/item3"
            android:icon="@drawable/ic_person_black_24dp"
            android:title="Contact"/>
    </menu>
    
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="#fff" android:state_checked="true"/>
        <item android:color="#fff" android:state_pressed="true"/>
        <item android:color="#ccc"/>
    </selector>
    

    itemIconTint是为tab里的icon着色,这里使用了跟文字相同的颜色效果。代码中就比较简单了:

    navigationView = (BottomNavigationView) findViewById(R.id.navigation);
    navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
         @Override
         public boolean onNavigationItemSelected(@NonNull MenuItem item) {
               Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
               return false;
         }
    });
    

    而上方的应用列表则使用RecyclerView,并搭配了新的divider类:

    mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
    mLayoutManager = new LinearLayoutManager(this);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter = new AppInfoAdapter(this, getAppInfo(), R.layout.item_app_info);
    mRecyclerView.setAdapter(mAdapter);
    // New in recyclerview-25.0.0
    mRecyclerView.addItemDecoration(new DividerItemDecoration(this, mLayoutManager.getOrientation()));
    

    调用DividerItemDecoration中的setDrawable(@NonNull Drawable drawable)方法是可以替换divider样式的。

    结语

    介绍就到这里了,示例demo的代码在这里(github),欢迎大家下载体验。

    相关文章

      网友评论

      • 广成de微博:可以加 未读吗.. :smiley:
      • 苏武难飞:如果选择状态与非选中状态图片不一样可以么 :sob:
      • Codpoe:按照官方的 material 规范的话,这个 BottomNavigationView 好像做不到滑动隐藏吧,而且还会盖住下面的布局,需要调整后面的布局,好像跟 Snackbar 的结合也不行。总之就是少了个 behavior。
        Codpoe:@FullStack 嗯,我正在写个 behavior😂,希望后面官方可以出个
        FullStack:@Codpoe behavior是可以自己做的,不过我估计后续版本官方会支持的。
      • SingorZhu:BottomNavigationView还没有github上面第三方的成熟
        bravian:@ZeroMatrix 3ks
        a077a928e7e2:@bravian https://github.com/Ashok-Varma/BottomNavigation 你可以看一下 这个我觉得不错
        bravian:@SingorZhu 比如Github上哪一个呢?
      • 230e1e0439ad:support包里的BottomNavigationView与MD文档设计有区别,而且功能很简陋,还谈不上能用的程度
        bravian:@basefas 比如哪些功能没有?底部 tab 无非就是点点然后切换,上面可以显示图标和文字
      • 满月写:你好 这个是从什么网址翻译过来的 :yum:
        FullStack:@满月写 一部分是官网。
      • 0b4a8a69f146:我在最新的Support Library25.0.0 里面RecyclerView会无法预览,你会吗?
        0b4a8a69f146:@FullStack 不是AS的锅吧,详情里面显示RecyclerView.里面,onAttachedToWindow(RecyclerView.java:2392)
        有个mode出错
        FullStack:@Herve_Lee 这个应该是as的bug
        FullStack:@Herve_Lee 会,目测很快会出修复版本
      • _deadline:Google也是埋了不少坑,想想tablayout不能设置图片就来气!!!
        _deadline: @Herve_Lee 太麻烦,虽然能,还是bug
        0b4a8a69f146:@_deadline tablayout可以设置图片哦
        FullStack:@_deadline 哈哈 是的 :smile:
      • 雪糕的粑粑:BottomNavigationView好评

      本文标题:Support Library 25.0.0 更新讲解

      本文链接:https://www.haomeiwen.com/subject/yewfuttx.html