Material-Design-组件之NavigationView

原文首发于微信公众号:jzman-blog,欢迎关注交流!Material Design 系列文章: Material Design组件之FloatingActionButtonMaterial Design组件之AppBarLayoutMaterial Design组件之CollapsingToolbarLayout今天来看一下 NavigationView 的使用,NavigationView 是一个标准的导航菜单,其菜单内容由菜单资源文件来填充,NavigationView 一般和 DrawerLayout 一起搭配使用构成抽屉菜单,分别由内容页和菜单页组成。主要内容如下: 基本布局常用属性文字选中效果图标与文字间距案例显示效果基本布局可以直接使用 DrawerLayout 作为根布局,里面依次是内容布局和菜单布局,切记内容布局一定是在菜单布局的前面,可以这样理解菜单划出的时候肯定应该在内容布局之上,如果两者顺序相反,则影响菜单 Item 的点击事件以及菜单的滑动隐藏,当然如果有 ToolBar 等,可以按需添加到内容布局中,也可以 DrawerLayout 外,唯一区别是侧换菜单是否遮挡 ToolBar,基本使用参考如下: <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <!--内容 --> <!--菜单--> <android.support.design.widget.NavigationView android:id="@+id/navigation" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/my_navigation_items" /> </android.support.v4.widget.DrawerLayout>常用属性下面是 NavigationView 的常用属性,具体如下: <!--菜单弹出方向-->android:layout_gravity="start"<!--菜单图标渲染的颜色-->app:itemIconTint="@color/colorPrimary"<!--菜单文字的颜色-->app:itemTextColor="@color/colorNormal"<!--菜单项背景颜色(组之间有间隔)-->app:itemBackground="@color/colorBackground"<!--菜单项-->app:menu="@menu/menu_navigation_view" <!--NavigationView的头部布局-->app:headerLayout="@layout/head_navigation_layout"文字选中效果如果美工比较用心会告诉点击时是那种颜色、按下是那种颜色或者是某种效果,此时就需要设置菜单项文字选中效果了,这里选择创建在 color 资源文件的形式来实现文字选中效果了,定义 color 资源文件如下: <?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!--按下--> <item android:color="@color/colorPress" android:state_pressed="true"/> <!--选中--> <item android:color="@color/colorCheck" android:state_checked="true"/> <!--默认--> <item android:color="@color/colorNormal"/></selector>然后,设置 NavigationView 的 itemTextColor 属性即可,具体如下: ...

May 15, 2019 · 2 min · jiezi

Material-Design-组件之-CollapsingToolbarLayout

CollapsingToolbarLayout 主要用于实现一个可折叠的标题栏,一般作为 AppBarLayout 的子 View 来使用,下面总结一下 CollapsingToolbarLayout 的使用。 Material Design 系列文章: Material Design组件之FloatingActionButtonMaterial Design组件之AppBarLayout常用属性//是否显示标题app:titleEnabled="true"//标题内容app:title="CollapsingToolbarLayout"//扩展后Title的位置app:expandedTitleGravity="left|bottom"//收缩后Title的位置app:collapsedTitleGravity="left"//CollapsingToolbarLayout收缩后Toolbar的背景颜色app:contentScrim ="@color/colorPrimary"//CollapsingToolbarLayout收缩时颜色变化的持续时间app:scrimAnimationDuration="1200"//颜色从可见高度的什么位置开始变化app:scrimVisibleHeightTrigger="150dp"//状态颜色变化(Android 5.0)app:statusBarScrim="@color/colorAccent"//设置滑动组件与手势之间的关系app:layout_scrollFlags="scroll|exitUntilCollapsed"对于 Title 当折叠布局完全可见时 Title 变大,可折叠布局随着向上滑动可见范围变小 Title 也变小,可以通过如下方式设置 Title 的颜色,具体如下: //设置标题ctlCollapsingLayout.setTitle("CollapsingToolbarLayout");//设置CollapsingToolbarLayout扩展时的颜色ctlCollapsingLayout.setExpandedTitleColor(Color.parseColor("#ffffff"));//设置CollapsingToolbarLayout收缩时的颜色ctlCollapsingLayout.setCollapsedTitleTextColor(Color.parseColor("#46eada"));这个 Title 的颜色渐变过程由 CollapsingToolbarLayout 完成,当然其他部分属性也可以在代码中设置。 两个标志位单独在说一下两个重要属性,可以作为一个标志位来记: layout_scrollFlagslayout_collapseModelayout_scrollFlags:一般使用 CoordinatorLayout、AppBarLayout等这些组件构成的界面,一般都有一个滚动视图,如 NestedScrollView,滚动视图一般设置了系统默认的 Behavior,具体如下: //设置layout_behavior属性<android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> ...</android.support.v4.widget.NestedScrollView>要随着滚动视图移动的组件,如 ToolBar、CollapsingToolbarLayout 等需要设置 layout_scrollFlags 属性来指定不同的动作,关于 layout_scrollFlags 值的具体含义请参考之前的一篇文章: Material Design 组件之 AppBarLayout 。 layout_collapseMode:layout_collapseMode 有两个值可以选择,如果设置了 pin 的 View 会随着页面向上滚动固定到顶部,如果设置了 parallax 的 View 会随着页面的滚动而滚动,此时可以结合另一个属性 layout_collapseParallaxMultiplier 形成视差滚动的效果。 CollapsingToolbarLayout 的介绍就到此为止,没有案例当然是不可以,下面是一个简单的使用案列,布局如下: <?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.manu.materialdesignsamples.samples.SampleCollapsingToolbarLayoutActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="200dp"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/ctlCollapsingLayout" android:layout_width="match_parent" android:layout_height="match_parent" app:titleEnabled="true" app:title="CollapsingToolbarLayout" app:expandedTitleGravity="left|bottom" app:collapsedTitleGravity="left" app:contentScrim ="@color/colorPrimary" app:scrimAnimationDuration="1200" app:scrimVisibleHeightTrigger="150dp" app:statusBarScrim="@color/colorAccent" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_collapseMode="parallax" app:layout_collapseParallaxMultiplier="0.6" android:background="@drawable/ic_collapsing_title"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="70dp" android:minHeight="?attr/actionBarSize" app:layout_collapseMode="pin"> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/rvCollapsing" android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.v4.widget.NestedScrollView></android.support.design.widget.CoordinatorLayout>显示效果下面是显示效果,具体如下: ...

May 14, 2019 · 1 min · jiezi

Material-Design组件之AppBarLayout

原文首发于微信公众号:jzman-blog,欢迎关注交流!AppBarLayout 是一个垂直方向的 LinearLayout,它实现了许多符合 Material Design 设计规范的状态栏应该具有的功能,比如滚动手势。 AppBarLayout 一般直接用作 CoordinatorLayout 的直接子对象,如果 AppBarLayout 在别的布局中使用,其大部分功能会失效,AppBarLayout 需要一个标示才能够知道滚动视图什么时候滚动,这个标示过程是通过绑定 AppBarLayout.ScrollingViewBehavior 类完成的,这意味着应该将滚动视图的行为设置为 AppBarLayout.ScrollingViewBehavior的一个实例,这里设置包含完整类名的字符串资源,具体如下: //设置layout_behavior属性<android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!-- Your scrolling content --></android.support.v4.widget.NestedScrollView>AppBarLayout 的子 View 应该设置一个可供滚动的 behavior,可以通过代码和 xml 属性设置,具体如下: //代码setScrollFlags(int)//xml attributeapp:layout_scrollFlagslayout_scrollFlags 属性主要是指定 AppBarLayout 子 View 当滑动手势变化时,AppBarLayout 的子 View 执行什么动作,layout_scrollFlags 属性有 5 个值,分别是: scrollenterAlwaysenterAlwaysCollapsedexitUntilCollapsedsnap在介绍这几个属性值之前,这些属性值的效果将以下面布局效果为例,布局如下: <?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.manu.materialdesignsamples.samples.SampleCoordinatorAppBarActivity"> <!--AppBarLayout——>子View设置layout_scrollFlags属性--> <android.support.design.widget.AppBarLayout android:id="@+id/ablBar" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="70dp" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="scroll"> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> <!--NestedScrollView——>设置layout_behavior属性--> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.RecyclerView android:id="@+id/rvAppBarData" android:clipToPadding="true" android:layout_width="match_parent" android:layout_height="wrap_content"/> </android.support.v4.widget.NestedScrollView></android.support.design.widget.CoordinatorLayout>scroll: 当设置 layout_scrollFlags 的属性为如下时: ...

May 13, 2019 · 1 min · jiezi

Material-Design-组件之-FloatingActionButton

Material Design 设计规范在 Google I/O 2014 推出,这种设计理念一经推出就受到广大开发者的喜爱,主要侧重于纸墨化创作和突出设计的实体感,使得设计更接近于真实世界,力求平滑、连续的交互方式与用户体验,这种设计规范更能促进 Android 生态系统的发展,为此,Google 提供了一系列的符合 Material Design 风格的控件,如 FloatingActionButton、Snackbar、TabLayout 等。虽然经常在开发中用到,但是没有做记录,打算从头开始记录一下这些组件的使用,今天说一下 CoordinatorLayout 和 FloatingActionButton 相关的知识。 CoordinatorLayoutCoordinatorLayout 是一个加强版的 FramLayout,意味着如果不加任何限制,在 CoordinatorLayout 里面的子 View 都会默认出现在左上角,CoordinatorLayout 有两个主要的使用方式: 作为应用的顶层布局作为与一个或多个子 View 交互的容器可为 CoordinatorLayout 里面的子 View 指定 Behavior,就在单个父布局中提供许多不同的交互效果,子 View 之间也可以相互交互,CoordinatorLayout 可以使用 CoordinatorLayout.DefaultBehavior 注解来指定子 View 的默认行为,总之,可以借助 CoordinatorLayout 实现不同的滚动效果。 FloatingActionButtonFloatingActionButton 是 Material Design 类型的按钮控件,一般表现是浮动在 UI 上层的圆形图标,有自己的 behavior 并可以设置锚点。 FloatingActionButton 有两种大小,分别是 normal(56dp) 和 mini(40dp) ,默认是 mini(40dp),其大小可以通过属性 fabSize 来指定需要的大小,当然也可以设置 fabSize 为 auto,系统会根据不同的屏幕选择合适的大小。 FloatingActionButton 间接继承 ImageView,可以使用如下方式在代码中设置图标: ...

May 11, 2019 · 2 min · jiezi