本篇大部分内容学习自第一行代码第二版加上部分自己理解。介绍了,Snakebar、FloatingActionButton、CoordinateLayout、ToolBar四个控件,会的请自行跳过。

首先需要在build.gradle中依赖:

implementation 'com.android.support:design:28.0.0'

1.Snackbar

我感觉是一个增强版的Toast,可以实现Toast的功能的基础上增加了与用户的交互事件,效果如下:

使用方法:

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayoutandroid:id="@+id/root"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=".Main2Activity"></FrameLayout>

java代码:

public class Main2Activity extends AppCompatActivity {@BindView(R.id.root)FrameLayout root;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);ButterKnife.bind(this);//基本使用方法与Toast类似//构建普通不带点击事件的SnakebarSnackbar.make(root, "Hello, I am is a Snakebar.", Snackbar.LENGTH_SHORT).show();new Thread(new Runnable() {@Overridepublic void run() {SystemClock.sleep(5000);runOnUiThread(new Runnable() {@Overridepublic void run() {//构建带点击事件的SnakebarSnackbar.make(root, "Would you want to delete the first item?", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() {@Overridepublic void onClick(View v) {Snackbar.make(root, "Delete Successful.", Snackbar.LENGTH_SHORT).show();}}).show();}});}}).start();}
}

2.FloatingActionButton

立体悬浮按钮是ImageButton的子类,是一个圆形加上点阴影效果的按钮。可以通过style里的colorAccent指定背景颜色,通过src指定图片

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayoutandroid:id="@+id/root"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=".Main2Activity"><android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_delete"android:layout_gravity="end|bottom"android:layout_margin="16dp"/></FrameLayout>

java代码:

public class Main2Activity extends AppCompatActivity {@BindView(R.id.fab)FloatingActionButton fab;//悬浮按钮@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);ButterKnife.bind(this);//设置悬浮按钮点击事件fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//构建带点击事件的SnakebarSnackbar.make(fab, "Would you want to delete the first item?", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() {@Overridepublic void onClick(View v) {Snackbar.make(fab, "Delete Successful.", Snackbar.LENGTH_SHORT).show();}}).show();}});}
}

3.CoordinatorLayout

加强版的FrameLayout,由Design Support库提供,使用方法参照FrameLayout,加强的地方在于可以监听其所有子控件的各种事件,然后自动帮我们做出最为合理的响应。注意layout_behavior这个新的属性,可以让被监听view随着指定该属性的子view做出反应,默认的常用值有@string/appbar_scrolling_view_behavior,大概意思就是指定了这个属性值的view并且这个view支持竖向和嵌套滑动时,appbar就可以自动的跟随view做滑动。可能说了这些还是不明白这个属性到底干什么用的,不过不要紧,那就先忽略这个属性吧,反正后面会用到,看到直观效果你就知道是干嘛用的了,别着急。

先看看CoordinatorLayout的简单用法,就是替代FrameLayout,还记得刚才FloatingActionButton的效果图吧?点击按钮Snakebar会挡住FloatingActionButton一半,而上边我们的xml布局里一直用的都是FrameLayout,现在改为CoordinateLayout我们看看效果吧。

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayoutandroid:id="@+id/root"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=".Main2Activity"><android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_delete"android:layout_gravity="end|bottom"android:layout_margin="16dp"/></android.support.design.widget.CoordinatorLayout>

java代码没有改动。

4.Toolbar

大家都很熟悉吧?actionBar的替代,之所以还要写是我之前没怎么用过,记笔记。

menu布局:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><!--showAsAction的值always一直显示,ifRoom如果有地方就显示,没有则隐藏,never一直隐藏--><item android:id="@+id/backup"android:title="BackUp"android:icon="@drawable/ic_backup"app:showAsAction="always"/><itemandroid:id="@+id/delete"android:title="Delete"android:icon="@drawable/ic_delete"app:showAsAction="ifRoom"/><itemandroid:id="@+id/setting"android:title="Setting"android:icon="@drawable/ic_settings"app:showAsAction="never"/>
</menu>

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayoutandroid:id="@+id/root"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=".Main2Activity"><!--定义theme指定toolBar中的子view的主题,popupTheme指定toolBar隐藏的menu打开时的主题--><android.support.v7.widget.Toolbarandroid:id="@+id/toolBar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:popupTheme="@style/ThemeOverlay.AppCompat.Light"android:background="@color/colorPrimary"/><android.support.design.widget.FloatingActionButtonandroid:id="@+id/fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/ic_delete"android:layout_gravity="end|bottom"android:layout_margin="16dp"/>
</android.support.design.widget.CoordinatorLayout>

java代码:

public class Main2Activity extends AppCompatActivity {@BindView(R.id.fab)FloatingActionButton fab;//悬浮按钮@BindView(R.id.toolBar)Toolbar toolbar;//toolBar@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);ButterKnife.bind(this);//设置toolBar的title文字toolbar.setTitle("ActionBar");//将toolBar设置为actionBarsetSupportActionBar(toolbar);ActionBar actionBar = getSupportActionBar();//显示返回按钮actionBar.setDisplayHomeAsUpEnabled(true);//设置悬浮按钮点击事件fab.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//构建带点击事件的SnakebarSnackbar.make(fab, "Would you want to delete the first item?", Snackbar.LENGTH_SHORT).setAction("确定", new View.OnClickListener() {@Overridepublic void onClick(View v) {Snackbar.make(fab, "Delete Successful.", Snackbar.LENGTH_SHORT).show();}}).show();}});}//设置toolBar上的menu@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.toolbar, menu);return true;}
}

android实现Materia Design风格APP(二):部分Materia Design风格的控件介绍一相关推荐

  1. Android ADB工具-管理设备 app(二)

    Android ADB工具-管理设备 app(二) 标签(空格分隔): Android 4.管理设备 app 命令 功能 adb install [-r|-s] <apkfile> 安装 ...

  2. App控件定位:Android 控件介绍及元素定位方法

    本文将分享Android相关基础知识和Android APP控件定位工具的使用方法. 目录 Android基础知识 Android布局 Android四大组件 1.activity 2.Service ...

  3. 移动应用开发之路 04 Android Studio 5种控件介绍、实战详解

    学校开了一门移动应用开发课程,我一开始兴趣盎然,但是看到使用的环境是 Java 8 的时候心就凉了一半,在询问老师的意见之后决定使用现在比较常用的Android Studio完成学习,特此记录自学之路 ...

  4. Android仿抖音加载框之两颗小球转动控件

    Android仿抖音加载框之两颗小球转动控件 本篇文章已授权微信公众号 hongyangAndroid(鸿洋)独家发布. 效果图 安卓版抖音v2.5加载框: 本控件效果图: 使用方法 源码地址:And ...

  5. firefox扩展开发(二):用XUL创建窗口控件

    firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...

  6. android studio实验二 Activity及常用布局和控件的使用

    实验内容 1.创建一个Android应用,创建一个Android应用,创建MainActivity和LoginActivity. 2.在MainActivity中的onCreate,onStart,o ...

  7. android自定义控件(6)-详解在onMeasure()方法中如何测量一个控件尺寸

    今天的任务就是详细研究一下protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)方法.如果只是说要重写什么方法有什么 ...

  8. Android 自定义View修炼-打造完美的自定义侧滑菜单/侧滑View控件(转)

    一.概述 在App中,经常会出现侧滑菜单,侧滑滑出View等效果,虽然说Android有很多第三方开源库,但是实际上 咱们可以自己也写一个自定义的侧滑View控件,其实不难,主要涉及到以下几个要点: ...

  9. Android 怎么实现支持所有View的通用的下拉刷新控件

    转载请标明出处: http://blog.csdn.net/u010386612/article/details/51372696 本文出自:[AItsuki的博客] 下拉刷新对于一个app来说是必不 ...

  10. Android SwipeRefreshLayout 官方下拉刷新控件介绍

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...

最新文章

  1. Python中的random模块
  2. Word中更新交叉引用
  3. 类成员初始化顺序php,PHP-php类成员变量初始化的问题?
  4. ubuntu下hbase的伪分布式安装与配置
  5. AtCoder Beginner Contest 176总结
  6. setsockopt函数功能介绍
  7. JS-元素大小深入学习-offset、client、scroll等学习研究笔记
  8. 【手记】解决“未能创建 SSL/TLS 安全通道”异常
  9. js的基本类型有哪些?引用类型有哪些?(二)------null和undefined的区别
  10. iOS:Universal Link
  11. 【SSH】Spring框架学习
  12. A - 敌兵布阵--线段树--模板水题
  13. 搭建文件服务器或nas免费版,nas文件服务器搭建
  14. 排序算法7——图解快速排序(两种主元选择方法)以及CUTOFF时间测试
  15. Cisco 2960 3750交换机端口流量的限速(QOS)详解
  16. php自动tag,discuz! 2.5x 3.0x的自动tag系统是如何实现的?
  17. js-最常用的js表单校验1
  18. C++使用windows API实现https站点的访问
  19. QT编程从入门到精通之一:“第一章:认识QT”之“1.1 Qt简介”
  20. 南阳市区彩礼 wribao.php230.com,2021南阳彩礼钱一般给多少 河南南阳2021年结婚彩礼...

热门文章

  1. python中的sorted是什么意思_Python中sorted()排序与字母大小写的问题
  2. 如何升级浏览器_涨姿势|教你用手机一键升级路由器软件(固件)
  3. java被oracle收购,sun被oracle收购了,openoffice和virtualbox会不会死?
  4. VScode:创建用户代码片段
  5. Win10:重新安装window store
  6. ElementUI:tree鼠标浮动在某个节点背景色以及点击背景色修改
  7. c语言 归一化图片大小,OpenCV学习笔记(1)——resize函数实现图像大小归一化
  8. mysql myisam commit_mysql autocommit对myisam,innodb的性能影响
  9. oracle高级函数api,Oracle函数-高阶篇
  10. Select2异步ajax方式加载数据