前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >听说谷歌Baba更新了 Material UI ...

听说谷歌Baba更新了 Material UI ...

作者头像
贺biubiu
发布于 2019-06-10 14:51:50
发布于 2019-06-10 14:51:50
3.2K00
代码可运行
举报
文章被收录于专栏:HLQ_StruggleHLQ_Struggle
运行总次数:0
代码可运行

本文预计阅读:10分钟

听说谷歌Baba的IO大会更新了一些新奇的小玩意~

新东西忒多,这里先重点关注下有关:Material UI

最近的状态啊,真是千万头草泥马奔腾而过。。。

来瓶哇哈哈,精神抖擞来一波~

简单回顾

Material Design,是谷歌在14年的IO大会上提出的一种新的理念,也被称为新的设计语言(也被称为“原材料设计”),称它为设计语言不为过,但是实际上,这仅仅是谷歌提倡的一种新的设计风格、理念以及设计基本原则。

脑图呈现文本重点

前期配置

当初LZ前期配置遇了不少坑,这里我们一起回顾下:

Step 1:打开工程目录下的build.gradle文件,并添加maven引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
allprojects {
    repositories {
        google()
        jcenter()
        // 1.添加Google Maven地址
        maven {
            url "https://maven.google.com"
        }
    }
}

Step 2:修改编译版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 2.修改编译版本为 android - P
compileSdkVersion 'android-P'

Step 3:移除项目工程中依赖的v7包以及添加material依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dependencies {
    // 3.移除项目工程中依赖的v7包
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    // 4.添加material依赖
    implementation 'com.google.android.material:material:1.0.0-alpha1'
}

当然,你可以使用

com.android.support:design:28.0.0-alpha1

但是主要注意的是design包和material二者只能选一。

Step 4: 使用 androidx.appcompat.app.AppCompatActivity

注意:使用的是androidx。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

本文说明

由于阅读在公众号内,在此LZ简单挑出几个比较有意思的说明一下,具体详情可点击原文大屏观看,怎一个爽字了得~

举几个栗子

首先放个小姐姐镇楼~ 

1. Bottom App Bar

Material Design的一个重要特征是设计 BottomAppBar。可适应用户不断变化的需求和行为,So,BottomAppBar是一个从标准物质指导的演变。它更注重功能,增加参与度,并可视化地锚定UI。

先来一个什么鬼样式都没有的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.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=".MainActivity">

    <com.google.android.material.bottomappbar.BottomAppBar
        android:id="@+id/bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        app:backgroundTint="@color/colorPrimaryDark" // 设置背景色
        app:navigationIcon="@android:drawable/ic_menu_call" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_anchor="@id/bar" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

效果当然比较Low咯~

下面引用一个官方内置样式:

style=”@style/Widget.MaterialComponents.BottomAppBar”: 

相对来说,效果还是不错的~

当然下面还有一些其他的属性:

可以通过FabAlignmentMode,FabAttached,FabCradleMargin,FabCradleRoundedCornerRadius和FabCradleVerticalOffset来控制FAB的放置;

  • (FabAlignmentMode)可以设置为中心或结束。如果FabAttached设置为True,那么Fab将被布置为连接到BottomAppBar;
  • FabCradleMargin是设置FAB和BottomAppBar之间的间距,改变这个值会增加或减少FAB和BottomAppBar之间的间距;
  • FabCradleRoundedCornerRadius指定切口周围角的圆度;
  • FabCradleVerticalOffset指定FAB和BottomAppBar之间的垂直偏移量。如果fabCradleVerticalOffset为0,则FAB的中心将与BottomAppBar的顶部对齐。

当然,我们还可以通过fabAttached属性去设置FloatingActionButton以及BottomAppBar是否粘合,效果如下:

  • app:fabAttached=”false”: 
  • app:fabAttached=”true”: 

2. Bottom Navigation

BottomNavigationView创建底部导航栏,用户只需轻点一下即可轻松浏览和切换顶级内容视图。 

当项目有3到5个顶层(底部)目的地导航到时,可以使用此模式。

使用也是很Easy,如下:

  1. 创建一个菜单资源 ,最多5个导航目标(BottomNavigationView不支持超过5个项目);
  2. 在内容下面放置BottomNavigationView;
  3. 将BottomNavigationView上的app:menu属性设置为菜单资源;
  4. 设置选择监听事件setOnNavigationItemSelectedListener(…)。

那下面按照步骤操作一次:

Step 1:在布局中添加BottomNavigationView:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<com.google.android.material.bottomnavigation.BottomNavigationView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:background="@color/colorPrimaryDark"
    app:menu="@menu/bottom_navigation_menu" />

Step 2:定义menu

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:icon="@android:drawable/ic_menu_info_details"
        android:orderInCategory="100"
        android:title="你" />
    <item
        android:icon="@android:drawable/ic_menu_info_details"
        android:orderInCategory="100"
        android:title="我" />
    <item
        android:icon="@android:drawable/ic_menu_help"
        android:orderInCategory="100"
        android:title="他" />

</menu>

Step 3: 运行一波,走起~

当然,内置了一些其他样式,感兴趣可原文查阅~

3. Bottom Sheets

BottomSheetBehavior应用于CoordinatorLayout的一个子类, 使其成为持久的底部工作表。

持久性底部页面是从屏幕底部出现的视图,在主要内容上升高。他们可以垂直拖动以暴露他们的内容列表。

注意:如果要使用模态(对话框)的底页,请使用 BottomSheetDialogFragment。

下面着撸起实现:

Step 1:搞个布局玩玩

外层使用CoordinatorLayout包裹,底部导航栏采用BottomNavigationView,中间内容区域,很Easy咯~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.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:id="@+id/cl_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <com.google.android.material.button.MaterialButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:onClick="showBehavior"
        android:text="测试" />

    <androidx.core.widget.NestedScrollView
        android:id="@+id/show_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:behavior_hideable="true"
        app:behavior_peekHeight="300dp"
        app:behavior_skipCollapsed="true"
        app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <androidx.cardview.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                app:cardBackgroundColor="@color/colorAccent" />

            <androidx.cardview.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                app:cardBackgroundColor="@color/colorPrimaryDark" />

            <androidx.cardview.widget.CardView
                android:layout_width="match_parent"
                android:layout_height="300dp"
                app:cardBackgroundColor="@color/colorAccent" />

        </LinearLayout>
    </androidx.core.widget.NestedScrollView>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        style="@style/Widget.Design.BottomNavigationView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@color/colorPrimaryDark"
        app:menu="@menu/bottom_navigation_menu" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

Step 2:实现效果,主要是BottomSheetBehavior使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.hlq.materialstudy;

import android.os.Bundle;
import android.view.View;

import com.google.android.material.bottomsheet.BottomSheetBehavior;

import androidx.appcompat.app.AppCompatActivity;
import androidx.coordinatorlayout.widget.CoordinatorLayout;

public class MainActivity extends AppCompatActivity {

    private CoordinatorLayout mCoordinatorLayout;
    BottomSheetBehavior behavior;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mCoordinatorLayout = findViewById(R.id.cl_layout);
        View bottomSheetView = mCoordinatorLayout.findViewById(R.id.show_list);
        behavior = BottomSheetBehavior.from(bottomSheetView);
        behavior.setState(BottomSheetBehavior.STATE_HIDDEN);
        behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
            @Override
            public void onStateChanged(View view, int i) {
                // 这里是bottomSheet 状态的改变,根据slideOffset可以做一些动画
            }

            @Override
            public void onSlide(View view, float v) {
                // 这里是拖拽中的回调,根据slideOffset可以做一些动画
            }
        });
    }

    public void showBehavior(View view) {
        behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
    }

}

Step 3:效果如下

俩步走,666没毛病。

这里再次简单描述相关细节:

Bottom Sheets具有五种状态:

  1. STATE_COLLAPSED: Bottom Sheets是可见的,但只显示可视(部分)高度。此状态通常是底部工作表的“静止位置”。可视高度由开发人员选择,应足以表明有额外的内容,允许用户触发某个动作或扩展Bottom Sheets;
  2. STATE_EXPANDED: Bottom Sheets是可见的并且它的最大高度并且不是拖拽或沉降;
  3. STATE_DRAGGING:用户主动向上或向下拖动Bottom Sheets;
  4. STATE_SETTLING: 拖动/轻扫手势后,Bottom Sheets将调整到特定高度。这将是可视高度,展开高度或0,以防用户操作导致底部表单隐藏;
  5. STATE_HIDDEN: Bottom Sheets隐藏。

如果已经在Activity使用CoordinatorLayout,添加底部表单很简单:

  1. 将任何视图添加为CoordinatorLayout的直接子视图。
  2. 通过添加以下xml属性来应用该行为 app:layout_behavior=”com.google.android.material.bottomsheet.BottomSheetBehavior”
  3. 设置所需的行为标志 
  • app:behavior_hideable:是否可以通过拖拽隐藏底部表单。
  • app:behavior_peekHeight:折叠状态的窥视高度。
  • app:behavior_skipCollapsed:如果底部表单可隐藏,并且设置为true,则表单不会处于折叠状态。

听说,有人想来点赞赏?

最后,觉得不错,来波转发~比心~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 贺biubiu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
手摸手实现一个编译器(上)
PEG.js 是一个简单的 JavaScript 解析器生成器,可以生成具有出色错误报告的快速解析器。您可以使用它来处理复杂的数据或计算机语言,并轻松构建转换器、解释器、编译器和其他工具。
码农小余
2022/06/16
8100
手摸手实现一个编译器(上)
lambda+reduce的一句艰深代码
一句话一脸懵逼 某天晚上看到一句lambda+reduce 组合的代码,看的头都炸了,愣是没看懂,不过也可能因为稀疏的脑神经经过一天的摧残已经运转不动了,这两天拿出来一看,一不留神理通了。 代码如下:
lonelydawn
2018/02/09
4760
lambda+reduce的一句艰深代码
AS3程序员小福利--as3js介绍及FlashDevelop工程的配置
IMWeb前端团队
2018/01/08
9600
AS3程序员小福利--as3js介绍及FlashDevelop工程的配置
从五大语言看函数和lambda表达式
张风捷特烈
2024/02/11
2100
从五大语言看函数和lambda表达式
简易理解设计模式之:解释器模式——语言和文法
先理解一些概念 语言: 指有限字符组成的字符串集合,也就是中文、英文、日语、德语…但对于程序员来说语言就是abcd这类字符了。
Twcat_tree
2022/11/29
4090
简易理解设计模式之:解释器模式——语言和文法
es6新语法+vue2的学习笔记分享
shigen
2023/09/15
2950
es6新语法+vue2的学习笔记分享
ES6篇(上)
前面文章所学均是ES5,而ES6就是提升,它提供了新的语法类型,接下来一起来认识一下吧🧐一、const1、概念声明常量,常量不可以重新赋值,不能改变<script> const BASE_URL = 'http' BASE_URL = 'baidu'</script>图片2、特点(1)当被修饰的表示符不会再次被赋值时,就可以用const保证数据的安全性(2)不可以重复声明,否则会报错<script> const BASE_URL = 'http' const BASE_URL = '
申小兮
2023/04/29
2730
ES6篇(上)
一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民。JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式。
达达前端
2019/11/19
8170
一篇文章把你带入到JavaScript中的闭包与高级函数
Javascript提升阶段学习
JavaScript 1:javascript简介   JavaScript是一种脚本语言,能实现网页内容的交互显示,当用户在客户端显示该网页时,浏览器就会执行JavaScript程序,用户通过交互
别先生
2017/12/29
1.3K0
每天3分钟,重学ES6-ES12(三)标签模版字符串
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
虎妞先生
2022/10/27
4980
Stanford公开课《编译原理》学习笔记(2)递归下降法
课程里涉及到的内容讲的还是很清楚的,但个别地方有点脱节,建议课下自己配合经典著作《Compilers-priciples, Techniques and Tools》(也就是大名鼎鼎的龙书)作为补充阅读。
大史不说话
2019/10/08
1.1K0
Stanford公开课《编译原理》学习笔记(2)递归下降法
Vue之js的高阶函数
arr = [20,40,12,232,23,232]; 需求1:找出数组中数值低于100的元素,组成新数组并返回 需求2:对返回的数组中的每个元素都乘2 需求3:汇总元素,将每一个元素相加并返回新数组。
yuanshuai
2022/08/22
4200
Vue之js的高阶函数
JS手撕(六) trim、模板字符串、千分位分隔符
核心就是/^\s+|\s+$/这一段正则表达式,它会匹配字符串前后的空格,然后通过replace()把匹配到的部分替换成空串。
赤蓝紫
2023/01/01
1.6K0
ES6-语法基础
箭头函数是把函数简写成一个表达式;如果只有一个参数,()可以省略;如果只有一个行,{ }可以省略,return 可以省略。
用户10175992
2022/11/15
4960
ES6-语法基础
学习表达式树笔记 原
文章地址:  http://www.cnblogs.com/Ninputer/archive/2009/08/28/expression_tree1.html
申君健
2018/09/21
4580
前端学习笔记
2d转换和3d转换的区别: 参数 多了一个 3d 手机一般有3d 渲染引擎(GPU)更快
Fivecc
2022/11/21
1.4K0
ES6特性总结
ECMAScript6.0(以下简称ES6,ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是EuropeanComputerManufacturersAssociation)通过ECMA-262标准化的脚本程序设计语言)是JavaScript语言的下一代标准,已经在2015年6月正式发布了,并且从ECMAScript6开始,开始采用年号来做版本。即ECMAScript2015,就是ECMAScript6。它的目标,是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言。每年一个新版本。
后端码匠
2021/02/20
2.2K0
设计模式-解释器模式
解释器模式 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。 1.优点 扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。 容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。 2.缺点 执行效率较低。解释器模式中通常使用大量的循环和递归调用,当
cwl_java
2019/10/26
2910
JAVA保姆式上手教程之JAVAWEB day01-js基础
张哥编程
2024/12/13
620
手撕常见JS面试题
高阶函数实现AOP(面向切面编程) Function.prototype.before = function (beforefn) { let _self = this; // 缓存原函数的引用 returnfunction () { // 代理函数 beforefn.apply(this, arguments); // 执行前置函数 return _self.apply(this, arguments); // 执行原函数
helloworld1024
2022/10/14
5530
相关推荐
手摸手实现一个编译器(上)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档