美文网首页
Android Material Design 笔记2

Android Material Design 笔记2

作者: silencefun | 来源:发表于2017-10-10 20:02 被阅读62次

    material design 笔记2

    一.沉浸

    1.什么是沉浸?传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别。这一样就在一定程度上牺牲了视觉宽度,界面面积变小。沉浸式是APP界面图片延伸到状态栏, 应用本身沉浸于状态栏,所以如果第三方的软件没有为状态栏分配图片,那么自然就是黑色。顶端的状态栏和下面的虚拟按键都隐藏,需要的时候从边缘划出。
    当启用该模式,应用程序的界面将占据整个屏幕,系统自动将隐藏系统的状态栏和导航栏,让应用程序内容可以在最大显示范围呈现,增加大屏体验,而当需要查看通知的时候只需要从顶部向下滑动就能呼出通知栏。

    沉浸模式实际上有两种:
    一种叫“沉浸模式”,状态栏和虚拟按钮会自动隐藏、应用自动全屏,这种模式下,应用占据屏幕的全部空间, 只有当用户从屏幕的上方边沿处向下划动时, 才会退出沉浸模式, 用户触摸屏幕其它部分时, 不会退出该模式, 这种模式比较适用于阅读器、 杂志类应用。

    另外一种叫“黏性沉浸模式”,让状态栏和虚拟按钮半透明,应用使用屏幕的全部空间, 当用户从屏幕的上方边沿处向下滑动时,也不会退出该模式, 但是系统界面 (状态栏、 导航栏) 将会以半透明的效果浮现在应用视图之上 , 只有当用户点击系统界面上的控件时, 才会退出黏性沉浸模式。

    2.Android 实现沉浸

    android从4.4开始,开始支持UI使用StatusBar与NavigationBar的范围。
    所以要进行下面的配置:
    在value中的styles.xml中设置

    <!-- Base application theme. -->
    <style name="AppTheme.Base"     parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    </style>
    <style name="AppTheme" parent="AppTheme.Base"></style>
    

    在value-v19中的styles.xml中设置(为了兼容4.4)

    <style name="AppTheme" parent="AppTheme.Base">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
    </style>
    

    在value-v21中的styles.xml中设置

    <style name="AppTheme" parent="AppTheme.Base">
    <!--透明状态栏-->
    <item name="android:windowTranslucentStatus">true</item>
    <!--透明导航栏-->
    <item name="android:windowTranslucentNavigation">true</item>
    <!--使状态栏,导航栏可绘制-->
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    </style>
    

    二.布局控件

    1.CardView、RecyclerView
    Android L(5.0)中新增了两个控件分别是CardView,RecyclerView,RecyclerView这个控件是一个可以装载大量的视图集合,并且可以非常效率的进行回收和滚动。当你list中的元素经常动态改变时可以使用RecyclerView控件。
    RecyclerView非常容易使用,它提供了如下两个功能:
    为每个条目位置提供了layout管理器(RecyclerView.setLayoutManager)
    为每个条目设置了操作动画(RecyclerView.setItemAnimator)

    CardView
    CardView继承自FrameLayout,允许你在card视图中显示信息. CardView也可以设置阴影和圆角。
    CardView在API 21以下的圆角效果处理
    2.com.android.support:design

    a.TextInputLayout 提示输入内容
    登录时可以提示。

    比如:

     <android.support.design.widget.TextInputLayout
                android:id="@+id/input_user_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:counterTextAppearance="@style/counterTextAppearance"
                app:errorTextAppearance="@style/errorTextAppearance"
                app:hintTextAppearance="@style/hintTextAppearance">
    
                <AutoCompleteTextView
                    android:id="@+id/tv_user_name"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/login_user_name_hint"
                    android:imeOptions="actionNext"
                    android:maxLength="20"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:textSize="@dimen/NormalTextSize" />
            </android.support.design.widget.TextInputLayout>
    
            <android.support.design.widget.TextInputLayout
                android:id="@+id/input_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:counterTextAppearance="@style/counterTextAppearance"
                app:errorTextAppearance="@style/errorTextAppearance"
                app:hintTextAppearance="@style/hintTextAppearance"
                app:passwordToggleEnabled="true">
    
                <EditText
                    android:id="@+id/tv_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/login_user_name_password"
                    android:imeActionId="@+id/login"
                    android:imeActionLabel="@string/action_sign_in"
                    android:imeOptions="actionDone"
                    android:inputType="textPassword"
                    android:maxLength="20"
                    android:maxLines="1"
                    android:singleLine="true"
                    android:textSize="@dimen/NormalTextSize" />
            </android.support.design.widget.TextInputLayout>
    

    注意:

    app:counterTextAppearance="@style/counterTextAppearance"
    app:errorTextAppearance="@style/errorTextAppearance"
    app:hintTextAppearance="@style/hintTextAppearance">

    可以自己在style中定义 暗示文字、提示文字、错误文字、以及的颜色 大小等风格。

        <!-- 登录相关-->
    <style name="errorTextAppearance" parent="@style/TextAppearance.Design.Error">
        <item name="android:textSize">18sp</item>
    </style>
    
    <style name="counterTextAppearance" parent="@style/TextAppearance.Design.Counter">
        <item name="android:textColor">@color/colorPrimaryDark</item>
        <item name="android:textSize">20sp</item>
    </style>
    
    <style name="hintTextAppearance" parent="@style/TextAppearance.Design.Hint">
        <item name="android:textColor">@color/colorPrimaryDark</item>
        <item name="android:textSize">20sp</item>
    </style>
    

    b.TabLayout
    一般与ViewPager配合 fragment一起使用

     <android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/tabLayout_hight"
        android:background="@color/colorPrimary"
        app:tabGravity="fill"
        app:tabIndicatorColor="@color/black_overlay"
        app:tabIndicatorHeight="@dimen/tabIndicatorHeight"
        app:tabMode="fixed"
        app:tabSelectedTextColor="@color/black"
        app:tabTextAppearance="@style/TabLayoutTextStyle"
        app:tabTextColor="@color/tablayout_select" />
    
    
    <ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
    

    其中 app:tabMode 两种模式 scrollable 可滚动的; 卷动; 可卷动的;fixed 固定的,不变的;
    app:tabGravity 两种 center 聚集在中间, fill充满整个bar平均分。

    TabLayout在布局底部是自带一条滚动条的,为了实现块状切换的效果,可以把 app:tabIndicatorHeight 属性设置为0dp,去掉滚动条

     app:tabIndicatorHeight="0dp"
    

    每个tab添加分割线

      mViewPager = (ViewPager) findViewById(R.id.viewPager);
        mTabLayout = (TabLayout) findViewById(R.id.tabLayout);
        LinearLayout linearLayout = (LinearLayout) mTabLayout.getChildAt(0);
        linearLayout.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
        linearLayout.setDividerDrawable(ContextCompat.getDrawable(this,
                R.drawable.layout_divider_vertical));
    

    在drawable 下边定义layout_divider_vertical

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/black"/>
    <size android:width="1dp"/>
    </shape>
    

    更改TabLayout选中的背景色

    在drawable文件夹下建立选中效果的文件 tab_background_selected.xml和没选中的效果文件tab_background_unselected.xml color不同而已。

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/colorPrimaryDark"/>
    </shape>
    

    在drawable文件夹下建立文件 tab_background_selector.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/tab_background_selected" android:state_selected="true" />
    <item android:drawable="@drawable/tab_background_unselected" android:state_focused="false" android:state_pressed="false" android:state_selected="false" />
    </selector>
    

    最后在Style 中新建 Base.Widget.Design.TabLayout 复写

       <style name="Base.Widget.Design.TabLayout" parent="android:Widget">
        <item name="tabBackground">@drawable/tab_selector</item>
        
    </style>
    

    继续整理 2017年10月17日 19:22:56

    AppBarLayout
    用AppBarLayout可以让包含在其中的子控件能响应被标记了ScrollingViewBehavior的的滚动事件(要与CoordinatorLayout 一起使用),利用它我们可以很容易的去实现视差滚动效果。
    CoordinatorLayout
    协调(Coordinate)其他组件, 实现联动.
    掌握 Coordinator Layout

    AppbarLayout 严重依赖于CoordinatorLayout,必须用于CoordinatorLayout 的直接子View。

    layout_scrollFlags有5种动作,分别是 scroll,enterAlways,enterAlwaysCollapsed,exitUntilCollapsed,snap。

    1. scroll ,子View 添加layout_scrollFlags属性 的值scroll 时,这个View将会随着可滚动View(如:ScrollView,以下都会用ScrollView 来代替可滚动的View )一起滚动,就好像子View 是属于ScrollView的一部分一样。

    2.enterAlways ,子View 添加layout_scrollFlags属性 的值有enterAlways 时, 当ScrollView 向下滑动时,子View 将直接向下滑动,而不管ScrollView 是否在滑动。注意:要与scroll 搭配使用,否者是不能滑动的。

    1. enterAlwaysCollapsed , enterAlwaysCollapsed 是对enterAlways 的补充,当ScrollView 向下滑动的时候,滑动View(也就是设置了enterAlwaysCollapsed 的View)下滑至折叠的高度,当ScrollView 到达滑动范围的结束值的时候,滑动View剩下的部分开始滑动。这个折叠的高度是通过View的minimum height (最小高度)指定的。要配合scroll|enterAlways 一起使用.

    4.exitUntilCollapsed, 当ScrollView 滑出屏幕时(也就时向上滑动时),滑动View先响应滑动事件,滑动至折叠高度,也就是通过minimum height 设置的最小高度后,就固定不动了,再把滑动事件交给 scrollview 继续滑动。

    5.snap,意思是:在滚动结束后,如果view只是部分可见,它将滑动到最近的边界。比如,如果view的底部只有25%可见,它将滚动离开屏幕,而如果底部有75%可见,它将滚动到完全显示。

    CollapsingToolbarLayout、
    让Toolbar可伸缩,在伸缩的时候决定ToolBar是移除屏幕和固定在最上面。

    属性意义

    1)contentScrim:当Toolbar收缩到一定程度时的所展现的主体颜色。即Toolbar的颜色。
    2)title:当titleEnable设置为true的时候,在toolbar展开的时候,显示大标题,toolbar收缩时,显示为toolbar上面的小标题。
    3)scrimAnimationDuration:该属性控制toolbar收缩时,颜色变化的动画持续时间。即颜色变为contentScrim所指定的颜色进行的动画所需要的时间。
    4)expandedTitleGravity:指定toolbar展开时,title所在的位置。类似的还有expandedTitleMargin、collapsedTitleGravity这些属性。
    5)collapsedTitleTextAppearance:指定toolbar收缩时,标题字体的样式,

    层级:

    <android.support.design.widget.CoordinatorLayout...>
    <android.support.design.widget.AppBarLayout...>
        <android.support.design.widget.CollapsingToolbarLayout...>
            <!-- your collapsed view -->
            <View.../>
            <android.support.v7.widget.Toolbar.../>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    
    <!-- Scroll view -->
    <android.support.v7.widget.RecyclerView.../>
    </android.support.design.widget.CoordinatorLayout>
    

    FloatingActionButton
    浮动按钮

    app:borderWidth=""------------------边框宽度,通常设置为0 ,用于解决Android 5.X设备上阴影无法正常显示的问题
    app:backgroundTint=""---------------按钮的背景颜色,不设置,默认使用theme中colorAccent的颜色
    app:rippleColor=""--------------------点击的边缘阴影颜色
    app:elevation=""----------------------边缘阴影的宽度
    app:pressedTranslationZ="16dp"-----点击按钮时,按钮边缘阴影的宽度,通常设置比elevation的数值大

    NavigationView、
    抽屉式的导航控件

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
    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="org.mobiletrain.drawerlayout.MainActivity">
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="主页面"/>
    </LinearLayout>
    
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/header_layout"
        app:menu="@menu/main"></android.support.design.widget.NavigationView>
    </android.support.v4.widget.DrawerLayout>
    

    1.android:layout_gravity="left"属性表示该View是左边的滑出菜单,这个属性的含义不用多说,这是DrawerLayout使用方式中的知识点。
    2.app:headerLayout="@layout/header_layout"表示引用一个头布局文件,这个头就是我们在上面看到的那个背景图片,包括背景图片上面的显示用户名的控件等等。
    3.app:menu="@menu/main"表示引用一个menu作为下面的点击项

    Snackbar
    SnackBar通过在屏幕底部展示简洁的信息,为一个操作提供了一个轻量级的反馈,并且在Snackbar中还可以包含一个操作,在同一时间内,仅且只能显示一个 Snackbar,它的显示依赖于UI,不像Toast那样可以脱离应用显示。它的用法和Toast很相似,唯一不同的就是它的第一个参数不是传入Context而是传入它所依附的父视图,但是他比Toast更强大。
    未实际应用,参考
    参考http://www.jianshu.com/p/cd1e80e64311/

    2017年10月17日 19:38:37

    相关文章

      网友评论

          本文标题:Android Material Design 笔记2

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