Android Material Design新UI控件使用大全 二

序言

上一篇中我们介绍了几个简单的新UI控件,相信很多小伙伴对Materil Design的视觉效果有了一定的了解,今天我们就继续介绍其他几个控件的玩儿法,让我们一探Materil Design的究竟,我们先来看一下我们今天要介绍的CoordinatorLayout,AppBarLayout,CollapsingToolbarLayoutTabLayout, ok,我们接下来就逐一对这些控件进行解析,揭开他们神秘的面纱,来为我们服务,Let’s Go.

TabLayout

我们先来看官方的介绍:

  • TabLayout是一个提供展示 tabs 的横向的layout;
  • Tabs的实例是通过TabLayout.Tab获取的,你可以通过调用newTab()来实现,你同时可以调用setText(CharSequence text)setIcon(int)来改变tab的名称及图标;如果你想要展示这些tabs,就需要调用addTab(Tab)了,示例代码:

    TabLayout tabLayout = ...;

    tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));

    tabLayout.addTab(tabLayout.newTab().setText("Tab 2"));

    tabLayout.addTab(tabLayout.newTab().setText("Tab 3"));

  • 你需要设置一个setOnTabSelectedListener(OnTabSelectedListener)来监听每个tab被选中时状态改变的回调;如果你在你的layout里面使用了viewpager的话,你就需要调用setupWithViewPager(ViewPager)来将二者进行绑定,这个layout会将viewpager的标题和内容进行自动填充;
  • 当然,你也可以直接在布局文件中添加TabItem来进行展示,示例代码:
<android.support.design.widget.TabLayout
         android:layout_height="wrap_content"
         android:layout_width="match_parent">

     <android.support.design.widget.TabItem
             android:text="@string/tab_text"/>

     <android.support.design.widget.TabItem
             android:icon="@drawable/ic_android"/>

 </android.support.design.widget.TabLayout>

我们经常会将viewpager与fragment结合使用来实现如图所示的效果,一般我们可能会使用viewpagerindicator开源框架来实现,如下图效果:

不过现在有了TabLayout,我们就可以直接使用谷歌原生的控件来实现这个效果,我们一般还是会和viewpager结合使用,我们先看效果图:

和viewpager的结合使用

1 xml文件中配置(只贴出核心代码)

<android.support.design.widget.TabLayout
    android:id="@+id/tablayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<android.support.v4.view.ViewPager
    android:id="@+id/tab_viewpager"
    android:layout_below="@id/tablayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/white"/>

2 在代码中将二者绑定(只贴出核心代码)

mViewpager.setAdapter(new MyCusAdapter(fm));

mTablayout.setTabMode(TabLayout.MODE_FIXED);

mTablayout.setupWithViewPager(mViewpager);

注意: mTabLayout在设置Tab模式时,有两个值,一个是TabLayout.MODE_FIXED,一个是TabLayout.MODE_SCROLLABLE,我们先来看一下官方对这两个值得解释

  • MODE_FIXED:Fixed tabs display all tabs concurrently and are best used with content that benefits from quick pivots between tabs.
  • MODE_SCROLLABLE:Scrollable tabs display a subset of tabs at any given moment, and can contain longer tab labels and a larger number of tabs.

其实就是一句话来解释,MODE_SCROLLABLE适合很多tabs的情况,MODE_FIXED是固定标签适合不是很多tab说的情况,默认为MODE_FIXED;我们通过两张图就可以很明显的看出来二者的区别,左侧为MODE_SCROLLABLE,右侧为MODE_FIXED

GitHub地址点我,相关代码在项目中包tablayout

CoordinatorLayout

我们先来看一下关于CoordinatorLayout的官方解释:

CoordinatorLayout is a super-powered FrameLayout.

CoordinatorLayout is intended for two primary use cases:

As a top-level application decor or chrome layout

As a container for a specific interaction with one or more child views

  • CoordinatorLayout是一个强大的FrameLayout
  • CoordinatorLayout有两个主要的应用方向:
    • 作为顶级应用程序的装饰或一个 chrome layout
    • 作为用于与一个或多个子视图的特殊交互的容器

其实CoordinatorLayout只是一个从另一层面去控制子view之间触摸事件的布局而已,可以实现不同的视觉滚动效果,我们接下来通过几个简单的示例来说明CoordinaLayout的作用;

CoordinatorLayout与FloatingActionButton及Snackbar结合

我们知道,当有SnackbarSnackbar可以显示在其他UI组件的上面,不过我们可以让FloatingActionButton不被Snackbar覆盖,,当Snackbar出现时,FloatingActionButton上移,Snackbar消失时,FloatingActionButton下移。我们可以看一下不使用CoordinatorLayout与使用之间的区别,左图是不使用的时候Snackbar弹出时候的效果, 右图为使用的时候Snackbar弹出时候的效果:

我们平时在代码中使用起来也很简单,只要使用CoordinatorLayout作为基本布局,将自动产生向上移动的动画。浮动操作按钮有一个 默认的 behavior来检测Snackbar的添加并让按钮在Snackbar之上呈现上移与Snackbar等高的动画。

小贴士:FloatingActionButton.Behavior: It’s main function is to move FloatingActionButton views so that any displayed Snackbars do not cover them.

代码示例:

<android.support.design.widget.CoordinatorLayout
        android:id="@+id/main_content"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
         android:id="@+id/rv"
         android:layout_width="match_parent"
         android:layout_height="match_parent">
   </android.support.v7.widget.RecyclerView>

   <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        android:layout_margin="16dp"
        android:src="@mipmap/search"
        app:layout_anchor="@id/rv"
        app:layout_anchorGravity="bottom|right|end"/>
 </android.support.design.widget.CoordinatorLayout>

里面有两个属性我们可能不太熟悉,设置app:layout_anchor和app:layout_anchorGravity是为了构建出特定的位置与效果的FloatingActionButton。

  • app:layout_anchor - 设置FAB的锚点,即以哪个控件为参照点设置位等
  • app:layout_anchorGravity - 设置FAB相对锚点的位置,值有 bottom、center、right、left、top等

最后, 在我们构造Snackbar时, 我们需要把CoordinatorLayout作为View参数传递过去, 如下所示:

Snackbar.make(mCoordinator, "Snackbar show", Snackbar.LENGTH_SHORT).show();

大家也可以看GitHub写的demo地址点我,对应的类为CoordinatorLayoutFloatingActivity

我们在下篇继续分析几个其他的控件,愿大家都有一个美好的今天,未完待续…

时间: 2024-10-14 00:58:19

Android Material Design新UI控件使用大全 二的相关文章

Android Material Design新UI控件使用大全 一

序言 自从谷歌在2014年的IO大会上推出了Material Design新的设计规范后,安卓应用的整体美观程度提升了很大的一个层次, 安卓再也不是又黑又丑的界面,取而代之的是拥有丰富的颜色,美观的按钮,好的用户体验;但是刚开始的话这种设计规范只能在Android 5.0以上的手机上运行,导致开发者也只是自己去体验,在国内并没有大范围的推广,App的质量并不能大幅度的提升,但是作为改变世界的Google公司不久就推出了兼容库Android Material Design,这绝对是业界良心了,我们

Android Material Design新UI控件使用大全 三

序言 在我们对NavigationView侧滑,TextInputLayout输入框,Snackbar弹出提示框,FloatingActionBar圆形button,TabLayout顶部导航栏及CoordinatorLayout有了一定的了解后,我们最后将对AppBarLayout,CollapsingToolbarLayout进行最后的分析,我们先看两张效果图,(因为暂时没找到好的方法来录制gif,先借用网上的图) AppBarLayout AppBarLayout 是继承LinerLayo

【Android】开源项目UI控件分类汇总之ProgressBar

Android开发的宝库越来越多,我开发中有需要的组件,主要参考Trinea的大作Android开源项目分类汇总(包含了后面的绝大多数).CSDN上直接拿来用!最火的Android开源项目还有CSDN上的直接拿来用!十大Material Design开源项目,受益匪浅,但是,有的分类项目太多,不是每个项目都有预览,不容易找到什么是最想要的,而且有一些项目不容易顺利地导入,我把同类的Demo做到一个app里,供大家下载参考.不过顺序没有按Trinea的大作来,当下需要什么控件,就优先写哪些,先从最

Android Material Design带UI变化

谷歌Matias Duarte称,"Material Design是漂亮和大胆的.由于干净的排版和布局简单且easy理解.内容才是焦点. 谷歌I/O 014开发人员大会上宣布全新的设计语言"Material Design",适用于旗下全部平台,包含 Android.Chrome OS 和网页. 谷歌Matias Duarte称,"Material Design是漂亮和大胆的,由于干净的排版和布局简单且easy理解.内容才是焦点. " Material De

【Android】开源项目UI控件分类汇总之Dialog

接前文ProgressBar:Android开发的宝库越来越多,我开发中有需要的组件,主要参考Trinea的大作Android开源项目分类汇总(包含了后面的绝大多数).CSDN上直接拿来用!最火的Android开源项目还有CSDN上的直接拿来用!十大Material Design开源项目,受益匪浅,但是,有的分类项目太多,不是每个项目都有预览,不容易找到什么是最想要的,而且有一些项目不容易顺利地导入,我把同类的Demo做到一个app里,供大家下载参考.本文介绍几种Dialog.Dialog相关的

Android Studio中关于UI控件的边框问题

1.首先在drawable目录中创建一个文件  例如shape.xml 2.可填写内容如下: 1 <!-- shape定义形状,shape="rectangle"表示形状为长方形 --> 2 <shape 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:shape="rectangle" > 5 <!-- 设置框内填充颜色

ANDROID L——Material Design详解(UI控件)

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lollipop(5.0). 前几天发现Android5.0正式版的sdk已经可以下载了,而且首次搭载Android L系统的Nexus 6和 Nexus 9也即将上市. 所以是时候开始学习Android L了! 关于Android L如何配置模拟器和创建项目,如果大家有兴趣的话可以看看我之前的一篇文章: A

Android Material Design系列之主题样式介绍说明

今天这篇文章应该算是Material Design系列的补充篇,因为这篇文章本来应该放到前面讲的,因为讲的是主题嘛,对于一些状态和颜色的介绍,因为我们一新建一个项目时,系统自带了三个属性的颜色,现在就重点介绍这三个颜色属性的意义和作用.讲明白这个,留着以后讲别的用. 最常用的三个颜色属性 colorPrimary colorPrimaryDark colorAccent 这三个分别代表什么意思呢? colorPrimaryDark 是状态栏底色 colorPrimary 如果你不手动自己去修改t

Android进阶——Material Design新控件之初识TabLayout(一)

引言 Google I/O 2015 推出的 Android Design Support Library令人非常激动.Material Design的推出确实振奋了不少 Android开发者以及用户的心.以前Google给我的感觉就像是他并没太在乎他们的UI(或者审美不同,Gmail不忍吐槽),但是当Material Design伴随Android5.0发布之后,一切好像就都变了个样,Google好像意识到了设计的重要性以及自己以往的种种不足,决定也要迎头赶上,不仅仅只是推出一套Materia