`

深入了解Material Design(一)

 
阅读更多

Material design

    Material Design大家并不陌生,Google为了保证Android平台上交互及视觉规范化提出了Material Design这个设计理念,它包括视觉、交互等多个方面。本文,在初步介绍Material Design的基础上,以一个开发者的视角来带大家来深入了解Material Design的开发及实现。

一、什么是Material Design

    官方解释见链接http://www.google.com/design/spec/material-design/introduction.html#

    个人理解Material Design是Google设计的一套视觉语言,将优先的经典的设计原理与科技创新相结合,为开发者提供一套完成视觉和交互设计规范。移动设备是这套设计语言的基础对象,让用户在不同的平台、不同尺寸的设备上能保持一致的体验。

     Material Design强调交互上的即时反馈,即对于用户的触控等行为app需要给出即时的反应。同时Material Design要求应用给用户带入感,让用户在使用时是沉浸在当前的应用当中。例如Google给出了沉浸式状态栏等“工具”,希望通过改变StatusBar和NavigationBar来给用户更强的融入感,专注于应用本身提供的内容。

    Google从动画、颜色、样式、触控反馈、布局等多个方面给出了Material Design的设计要求。无论是单一的控件还是图文布局,Google都给出了明确的设计说明,有兴趣的同学可以去上方提到的官方链接处做进一步了解,因为更多的涉及到UI和UE上的内容,这里就不做过多的介绍了。

二、Material Design的兼容性

    Material Design是在Android5.0的基础上提出的全新的设计语言,因此有很多控件特性都只在5.0及以上的版本才支持。为了更好的向下兼容老的平台版本,Google提供了v4、v7、v13包,同时在今年又提供了Support Design包。通过在项目中引入这些包的最新版本,可以很快的完成相关界面的开发工作。

    值得注意的是,Theme是无法直接向下兼容的,因此需要去实现两套不同的styles.xml来保持在不同平台上的Theme的一致性,具体的实现方式,会在后面的代码实践中为大家讲解。

三、Material Design的实践初体验

     我们初次体验和实践需要完成的是一个带有全新ActionBar的Activity,并为其设置沉浸式状态栏。保证在Android4.4和Android5.0两个平台上的体验和视觉一致性。ActionBar在新版本的Android中已经被废弃,取而代之的是使用更为简便的Toolbar,而在android.support.design包中Google引入了全新的AppBarLayout,它可以配合Toolbar等其他的控件,来实现ActionBar的诸多效果。本文只做沉浸式状态栏的讲解,在后面的文章中,会进一步的介绍AppBarLayout的作用及用法。

     首先为了兼容5.0以下的Android平台,我们需要引入v7的support jar包。在Gradle中加入如下的依赖包。写法如下:

 

dependencies{
  //appcompat支持,在低版本上引入Material Design支持的Activity和对应的Theme
  compile 'com.android.support:appcompat-v7:22.2.0' 
 //Google今年刚刚推出的全新的support包,用于完善Material Design的开发包,本次我们只需要用到其中的AppBarLayout
  compile 'com.android.support:design:22.2.0'
}
    然后,我们来编辑应用对应的Material Design的Theme。如果你的应用不需要支持Android5.0以下的平台,可以按照如下的方式定义Style:

 

 

<style name="Base.Theme.DesignDemo" parent="android:Theme.Material.Light.NoActionBar">
        <item name="colorPrimary">#673AB7</item>
        <item name="colorPrimaryDark">#512DA8</item>
        <item name="colorAccent">#FF4081</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
</style>
     而本次我们需要兼容5.0以下的版本,因此需要建立两份styles文件,同时对应的Activity需要继承自AppCompatActivity。先来看两份styles怎么写及每个item的意义是什么。

     在vaules文件夹下创建styles.xml文件,定义如下的style:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.DesignDemo" parent="Base.Theme.DesignDemo">
    </style>
    <style name="Base.Theme.DesignDemo" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">#673AB7</item>
        <item name="colorPrimaryDark">#512DA8</item>
        <item name="colorAccent">#FF4081</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>
      创建按values-v21文件夹,并再其下创建styles.xml文件
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="Theme.DesignDemo" parent="Base.Theme.DesignDemo">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <!--<item name="android:statusBarColor">@android:color/transparent</item>-->
    </style>

</resources>
     先来解释下,Base.Theme.DesignDemo中几个Item的意义。我们来看张Google给出的图解:
该图说明了colorPrimary以及colorPrimaryDark分别指向的部位,而colorAccent是用来表现checkboxes等UI控件的。通过上面的styles文件我们可以看到,针对5.0的机器我们增加两个item,它们是5.0新增的属性。
windowDrawsSystemBarBackgrounds,将它设置为true,系统将在你的window里面绘制status bar,默认为TRUE,之所以要写出来是因为你的theme有可能是继承过来的,确保为true。
statusBarColor设置为透明是因为我们不再需要系统的status bar,因为我们无法控制它的位置。
为什么我们要注释掉statusBarColor的设置呢?因为当我们把statusBarColor设置为透明时,会导致样式中定义的colorPrimaryDark会失效。那我们什么时候需要用到这条设置呢?当我们使用DrawerLayout这个抽屉布局的时候,DrawerLayout会帮助我们来完成对statusBar的控制。DrawerLayout的用法,我们会在后面讲到。
接下来,我们新建一个Activity并编写它的布局。

public class ImmerseActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_immerse);
        Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        final ActionBar ab = getSupportActionBar();
        ab.setHomeAsUpIndicator(R.drawable.user_icon_default);
        ab.setDisplayHomeAsUpEnabled(true);
    }

}
 布局文件:
<RelativeLayout 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"
    android:fitsSystemWindows="true"
    tools:context="com.river.newfeaturestudy.ImmerseActivity">
    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        >
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/appbarlayout_height"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"/>
    </android.support.design.widget.AppBarLayout>

</RelativeLayout>
 我们将前文写好的样式引入到app里,编辑AndroidManifest.xml
<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.DesignDemo" >
        <activity
            android:name=".ImmerseActivity"
            android:label="@string/title_activity_immerse" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 让我们把代码运行起来,看看在5.0的机器上会是什么样的效果呢?


 
这就是我们希望看到的沉浸式状态了。那同样的代码,在4.4的机器上又会是如何的表现呢?

 
可见在4.4上,并没有达到我们期望中的沉浸式状态栏效果。要如何解决这个问题呢?我们在下一篇文章中,会详细讲解。
  • 大小: 28.8 KB
  • 大小: 49.1 KB
分享到:
评论

相关推荐

    android material design实现demo

    Android Material Design 实现 Demo Material Design 是 Google 推出的一种设计...同时,这也是一个深入了解 Material Design 设计原则和实践技巧的好机会。记得在实践中不断调试和优化,以适应不同设备和用户需求。

    C# WPF MaterialDesignInXAML样式库和控件集 源码

    通过研究MaterialDesignInXamlToolkit的源码,开发者可以深入了解WPF控件的自定义、主题应用以及动画实现的底层机制。这对于提升WPF开发技能,尤其是UI设计和用户体验优化方面具有极大的帮助。 1. 控件设计:源码...

    MaterialDesignInXaml.Examples-master.zip

    通过研究这个压缩包中的例子,开发者不仅可以了解如何在WPF应用中使用MaterialDesignInXaml,还可以学习到关于WPF、MVVM模式以及如何编写高质量代码的最佳实践。 总的来说,"MaterialDesignInXaml.Examples-master...

    Material Design之Material Menu

    首先,让我们深入了解一下ToolBar。ToolBar是一个自定义视图,它是android.support.v7.widget.Toolbar类的实例。它的引入使得开发者可以更加自由地定制顶部栏,包括字体样式、颜色、按钮等。在布局XML文件中,你可以...

    MaterialDesign风格换肤

    MaterialDesign风格,源自谷歌提出的 Material Design 设计语言,是一种现代、直观且富有层次感的界面设计规范,旨在提供跨平台的一致性用户体验。这一风格强调深度效果、动态反馈和大胆的色彩运用,使得用户界面...

    自定义MaterialDesign风格的Dialog

    首先,我们需要了解Material Design Dialog的基础特性。在Material Design规范中,Dialog是一种全屏或半屏的弹出视图,用于在主流程中提供临时信息或决策选项。它们通常包含标题、内容、操作按钮以及可选的关闭图标...

    MaterialDesign

    这个"MaterialDesign"源码是GitHub上的一个项目,提供了一个完整的Material Design样例应用,帮助开发者了解和实践这一设计原则。 在Android开发中,Material Design主要体现在UI组件和界面布局上,包括颜色系统、...

    Material Design demo

    在“MaterialDesign”这个压缩包中,你可能会找到包含示例代码、资源文件和预览图的文件,用于展示如何在Android 5.0及更高版本的应用中实现这些设计原则。通过分析这些文件,开发者可以学习如何在自己的应用程序中...

    超清晰的MaterialDesign的学习DEMO.rar

    这个“超清晰的MaterialDesign的学习DEMO”压缩包包含了一系列示例,帮助开发者深入理解并应用Material Design原则。 在Material Design中,设计的核心概念是“材料”,它模拟了现实世界中的纸张和墨水,赋予界面...

    基于Material Design 2实现的Shrine-MaterialDesign2..zip

    总之,Shrine-MaterialDesign2项目为开发者提供了一个学习Material Design 2的鲜活实例,无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和灵感。通过深入研究项目源码,你将能够更好地理解并运用...

    Material design非官方中文指导手册

    Material Design非官方中文指导手册是一份专门针对Android UI设计的规范指南,它对谷歌提出的Material Design设计语言进行了详细的解读和指导。Material Design是一种视觉设计语言,由谷歌于2014年推出,目的是为...

    一款基于Google Material Design设计开发的Android密码管理客户端

    这表明我们可能有机会深入到源代码层面,了解其内部的工作原理和实现细节,比如如何实现密码加密、如何与云端同步数据、如何利用Material Design进行界面布局等。 综上所述,这款名为“怕死我的”Android密码管理...

    简单的Material Design风格计算器

    【Material Design风格计算器】 Material Design是由谷歌提出的一种设计语言,旨在提供统一的视觉和交互...通过研究其源代码,开发者可以深入了解如何将这些元素结合起来创建出用户体验良好、视觉效果出色的Web应用。

    Jquery DataTable Bootstrap Based Admin Template - Material Design

    ### Jquery DataTable Bootstrap Based Admin ...通过学习和实践该模板,开发者不仅可以掌握 Jquery DataTables 和 Bootstrap 的使用方法,还能深入了解 Material Design 的设计理念,为自己的项目增添更多的亮点。

    Material Design多窗口dome

    首先,我们来了解一下Material Design中的滑动菜单,通常被称为Navigation Drawer。这是一个可以从屏幕边缘滑出的面板,用于展示导航选项或设置。在Android开发中,我们可以使用`androidx.drawerlayout.widget....

    Android Material Design Icon Generator Plugin.zip

    Android Material Design Icon Generator Plugin 是一个开源项目,专为Android开发者设计,旨在简化应用程序中Material Design图标的使用。这个插件的目的是提高开发效率,避免手动创建和适配各种尺寸的图标,确保...

    用于reactnative应用中的MaterialDesign风格的底部导航

    接下来,我们深入探讨Material Design风格的底部导航。底部导航栏(Bottom Navigation)通常包含3到5个图标按钮,每个按钮代表一个主要的功能区域。当用户点击某个按钮时,屏幕内容会切换到相应的视图。在Material ...

    Android 开发之 Material design widget

    在Android开发中,Material Design是一种广泛采用的设计语言,旨在提供一致、美观且功能丰富的用户体验。Material Design widget是Android SDK中的组件,它们遵循Material Design规范,为开发者提供了丰富的UI元素,...

Global site tag (gtag.js) - Google Analytics