关键词:
考虑到V7包实在大—–既庞大又强大 , 请所有与会的同学到门口来
我们先拍一张全家福:
1 . android.support.v7.widget.Toolbar
2 . android.support.v7.widget.CardView
3 . com.android.support:recyclerview-v7:xx
4 . com.android.support:design包.FloatingActionButton
5 . com.android.support:design包.TextInputLayout
6 . com.android.support:design包.Snackbar
7 . com.android.support:design包.TabLayout
8 . com.android.support:palette-v7:xx
9 . com.android.support:design包.CoordinatorLayout
10 . com.android.support:design包.AppBarLayout
11 . com.android.support:design包.CollapsingToolbarLayout
12 . com.android.support:design包.NavigationView
在这里向大家推荐下百度文库里面的一篇文章 , 他介绍这个神秘家族:
http://wenku.baidu.com/link?url=UxYI_7hJDe83IdBNgOhX9wFlf9HCnzdlq5N92FllkIWaMLev0zUzyGSV9OJ1_0CryMJdX4IiHZCXiBvdrtBFvxJin_rjHO8iretMVCpnacO
然后大家逐个自我介绍下:
1 . android.support.v7.widget.Toolbar
使用方法:
1.引用v7 的appcompat 包
2.使用Toolbar的Activity要继承AppCompatActivity
3.需要更改主题为NoActionbBar的主题
4.在布局文件中引用Toolbar , 需引用v7包中的Toolbar , 默认的Toolbar 仅支持 API >= 21 (android 5.0)的系统
5.在代码中调用setSupportActionBar(toobar) 方法将Toolbar绑定到当前界面
优秀作品展示:
博客推荐 : http://blog.csdn.net/javazejian/article/details/50451853
2 . android.support.v7.widget.CardView
继承自FrameLayout并实现了圆角和阴影效果,常用于ListView或RecyclerView中Item布局的根节点
优秀作品展示:
博客推荐 : https://yq.aliyun.com/articles/5975
3 . com.android.support:recyclerview-v7
recyclerview
高度解耦 , 异常灵活 , 可以用来代替ListView / GridView
使用步骤:
1.导包
2.在布局文件中添加RecyclerView
3.在Java代码中实现RecyclerView, 至少要添加两个属性:
recyclerView.setLayoutManager(new LinearLayoutManager(this));//指定布局管理器
recyclerView.setAdapter(adapter); //指定Adapter
4.Adapter的写法
1)创建一个自定义的ViewHolder,在里面初始化Item的每一个控件
2)让自定义的Adapt而继承RecyclerView.Adapter<传入自定义的ViewHolder>
3)实现对应的方法
优秀作品展示
博客推荐 : http://blog.csdn.net/lmj623565791/article/details/45059587
4 . Material Design 自定义主题常用属性值
com.android.support:design包FloatingActionButton
漂浮的Button,该控件父类为ImageView,所以拥有ImageView的所有属性
优秀作品展示
博客推荐 : http://blog.csdn.net/lmj623565791/article/details/46678867
5 . com.android.support:design包.TextInputLayout
用于在EditText上显示Floating提示效果的控件。该控件内部必须包括有且只有一个EditText等输入控件。
注意:
android:hint需要设置在EditText身上
改变hint的颜色需要更改主题的colorAccent 颜色值
优秀作品展示
博客推荐 : http://www.jcodecraeer.com/a/basictutorial/2015/0821/3338.html
或http://www.jianshu.com/p/35080eb5a28f
6 . com.android.support:design包.Snackbar
介于Toast和AlertDialog之间的轻量级控件,方便的实现消息的提示和动作的反馈
常用方法和属性
Snackbar.make(View view, CharSequence text, int duration).show();
Snackbar.setAction();
Snackbar.dismiss()
注意事项:
1.构造函数中第一个参数不能是ScrollView,因为SnackBar的实现逻辑是向view中addView,而ScrollView只能有一个childView
2.如果用SnackBar来代替Toast,需要注意的是Toast会浮在所有View之上,包括键盘.而SnakeView是在View之上addView的,所以要注意如果有键盘的时候,一定要先调用Keyboard.hide() , 否则键盘会将SnackBar遮住 .
优秀作品展示
博客推荐 : http://www.tuicool.com/articles/BfEbMvB或http://www.jcodecraeer.com/plus/view.php?aid=3187
7 . com.android.support:design包.TabLayout
封装好了tab页和指示器
常用方法及属性
addTab(TabLayout.Tab tab, boolean setSelected) //添加Tab
addTab(TabLayout.Tab tab, int position)
addTab(TabLayout.Tab tab, int position, boolean setSelected)
newTab() //创建Tab
setOnTabSelectedListener(TabLayout.OnTabSelectedListener onTabSelectedListener) //设置监听
setTabTextColors(int normalColor, int selectedColor) //设置被选中Tab的文字的颜色
setSelectedTabIndicatorColor(int color) //设置被选中Tab指示条的颜色
setSelectedTabIndicatorHeight(int height) //设置被选中Tab指示条的高度
setTabMode(int mode) //设置Tab的模式 MODE_FIXED/MODE_SCROLLABLE
注意:
与ViewPager结合Fragment使用,PagerAdapter必须重写getPageTitle()方法
设置适配器:
tabLayout.setupWithViewPager(ViewPager viewPager) //必须在ViewPager.setAdapter() 之后调用
tabLayout.setTabsFromPagerAdapter(PagerAdapter adapter)
优秀作品展示
博客推荐 : http://www.cnblogs.com/JohnTsai/p/4715454.html
8 . com.android.support:palette-v7包
动态色彩
想想如果根据图片来决定标题的颜色和标题栏的背景色,这样视觉上是不是具有很强的冲击力和新鲜感,而不像统一色调那样呆板。
Palette类也是Android5.0引进来的一个获取Bitmap颜色值的一个类。
例 : 如下异步获得bitmap图片颜色值并应用
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() { @Override
public void onGenerated(Palette palette) {
Palette.Swatch vibrant = palette.getVibrantSwatch();//有活力
if (vibrant != null) {
holder.title.setBackgroundColor( vibrant.getRgb()); holder.title.setTextColor(
vibrant.getTitleTextColor()); } } });
Android设备中,对图像的处理有可能是耗时操作,因此,Palette类通过异步接口onGenerated回调的方法
来获得Bitmap的颜色值。Palette类获得的颜色值有以下几种类型:
Palette.Swatch a = palette.getVibrantSwatch();//有活力
Palette.Swatch b = palette.getDarkVibrantSwatch();//有活力 暗色
Palette.Swatch c = palette.getLightVibrantSwatch();//有活力 亮色
Palette.Swatch d = palette.getMutedSwatch();//柔和
Palette.Swatch e = palette.getDarkMutedSwatch();//柔和 暗色
Palette.Swatch f = palette.getLightMutedSwatch();//柔和 亮色 我们从以上颜色中可以获取到如下颜色值:
int color1 = a.getBodyTextColor();//内容颜色
int color2 = a.getTitleTextColor();//标题颜色
int color3 = a.getRgb();//rgb颜色
优秀作品展示
博客推荐 : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0304/2532.html
9 . com.android.support:design包.CoordinatorLayout
更加强大的FrameLayout。
主要用于以下情形:
1.作为一个布局的根布局
2.作为一个为childView之间协调手势效果的协调视图
主要属性:
app:layout_scrollFlags:控制那个childView可滑动
属性值:
1.scroll: 所有想滚动出屏幕的view都需要设置这个flag,没有设置这个flag的view将被固定在屏幕顶部
2.enterAlways: 这个flag让任意向下的滚动都会导致该view变为可见,启用快速“返回模式”
3.enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度
4.exitUntilCollapsed: 滚动退出屏幕,最后折叠在顶端
优秀作品展示
博客推荐 : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0717/3196.html
10 . com.android.support:design包.AppBarLayout
一个垂直方向的LinearLayout,实现了Matrerial Design效果的App Bar,支持滑动手势操作。
注意事项:
1.必须作为CoordinatorLayout的childView使用,否则很多特效无法实现。
2.同级控件中,必须有一个可滚动的siblingView,不然你用我干嘛呢?
实现滑动的步骤:
1.CoordinatorLayout必须作为整个布局的父布局容器
2.CoordinatorLayout布局下包裹一个可以滑动的布局,比如 RecyclerView,NestedScrollView(ListView,ScrollView不支持)
3.给AppBarLayout设置app:layout_scrollFlags=”scroll|enterAlways” 属性
4.给可滑动的组件,也就是RecyclerView 或者 NestedScrollView 设置如下属性:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
优秀作品展示
博客推荐 : http://www.jianshu.com/p/d159f0176576
或:https://github.com/saulmm/CoordinatorBehaviorExample
11 . com.android.support:design包.CollapsingToolbarLayout
提供一个可折叠的Toolbar容器,对容器中的不同视图设置layout_collapseMode折叠模式,来达到不同的折叠效果
指定childView折叠模式使用
app:layout_collapseMode
值:1.parallax 视差模式 , 需要增加 app:layout_collapseParallaxMultiplier 属性 , 属性值范围为 0.0-1.0 , 必须是float类型
2.pin 固定模式
注意事项:
1.CollapsingToolbarLayout的高度必须是固定值而且要大于Toolbar的高度 , 不能使用wrap_content , 否则不会有折叠效果
2.所有需要折叠的childView必须指定app:layout_collapseMode 属性
3.如果要添加一个自动折叠的FloatingActionBar , 必须指定锚点,锚点需为CollapsingToolbarLayout的父容器
使用parallax模式的时候,app:layout_scrollFlags的属性值不能包含enterAlwaysCollapsed或enterAlways
优秀作品展示
博客推荐 : http://www.open-open.com/lib/view/open1438265746378.html
12 . com.android.support:design包.NavigationView
类似SlidingMenu
常用属性和方法
android:layout_gravity="left"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/drawer_menu"
app:itemBackground //指定menu背景资源
app:itemIconTint //指定menu Icon的颜色
app:itemTextColor //指定menu item的字体颜色
说明:app属性为控件持有的属性,需要导入包名
xmlns:app="http://schemas.android.com/apk/res-auto"
注意:
1.自动生成的代码中的Toolbar只能支持在API 21(android 5.0)以上
2.点击某一项后自动隐藏:drawerLayout.closeDrawers();
3.主布局文件,根节点标签为android.support.v4.widget.DrawerLayout
4.头部部分布局文件,drawer_header.xml
压轴大戏
1 . 先看布局:
<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">
<!-- the main content view -->
<include layout="@layout/layout_content" />
<!-- the navigetion view -->
<android.support.design.widget.NavigationView android:id="@+id/navigationView" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="left" android:fitsSystemWindows="true"
app:headerLayout="@layout/layout_header" app:menu="@layout/layout_menu">
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
其中NavigationView 中的 android:layout_gravity=”start” 属性来控制抽屉菜单从哪边滑出,一般“start ”从左边滑出,“end”从右边滑出。
这里最主要的两个属性分别是:
1.app:headerLayout: 给NavigationView添加头部布局
2.app:menu:给NavigationView添加menu菜单布局
app:headerLayout布局如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="200dp"
android:background="@drawable/img1" android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="125dp" android:layout_height="125dp" android:scaleType="centerCrop" android:src="@drawable/image" />
<TextView
android:layout_marginTop="15dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="CSDN废墟的树博客"
android:textColor="@android:color/white" /> </LinearLayout>
app:menu 布局如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<group
android:checkableBehavior="single" android:title="Home items">
<item
android:id="@+id/nav_blog"
android:icon="@drawable/ic_account_balance_black_24dp" android:title="博客地址" />
<item
android:id="@+id/nav_ver"
android:icon="@drawable/ic_error_outline_black_36dp" android:title="版本信息" />
<item
android:id="@+id/nav_about"
android:icon="@drawable/ic_error_outline_black_36dp" android:title="关于我" />
</group>
<item android:title="Sub items">
<menu>
<item
android:id="@+id/sub_exit"
android:icon="@drawable/ic_power_settings_new_black_36dp" android:title="退出应用" />
<item
android:id="@+id/sub_switch" android:icon="@drawable/ic_settings_applications_black_36dp" android:title="切换主题" />
</item>
</menu>
</menu>
代码中控制NavigationView
private void initNavigationView(){
navigationView = (NavigationView) findViewById(R.id.navigationView); drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); //设置侧滑菜单
选择监听事件
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
menuItem.setChecked(true); //关闭抽屉侧滑菜单
drawerLayout.closeDrawers(); return true; } }); }
@Override
public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home){ //打开抽屉侧滑菜单
drawerLayout.openDrawer(GravityCompat.START); }
return super.onOptionsItemSelected(item);
}
关于NavigationView中item的字体颜色和icon选中状态颜色是去当前主题theme中的
<--正常状态下字体颜色和icon颜色--> <item
name="android:textColorPrimary">@android:color/darker_gray</item>
<--选中状态icon的颜色和字体颜色-->
<item name="colorPrimary">@color/accent_material_light</item>
当然你可以通过如下方法或者属性来改变这一状态.
优秀作品展示
博客推荐 : http://blog.csdn.net/lmj623565791/article/details/46405409
或http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0303/2522.html
号外号外!解决github+hexo+yilia评论插件的问题!!!
先走一波效果图! 本人网站--http://www.wenzheng.club/ps:效果还是不错的,支持QQ微信登录,支持表情,甚至gif动图评论!插件采用韩国服务器的来必力评论插件--https://livere.com/ 电脑端效果如下 &... 查看详情
号外一下
最近国内疫情严重,看访youtube,各种湾湾报道,各种人士批评我国,颇有幸灾乐祸之嫌,突然看到一则新闻:“中国女足5-0大胜中国台北,晋级复赛”呵呵,再怎么着马也没有骆驼大,何况大老虎狮子龙呢。 查看详情
号外号外你和python大牛的差距有多少?
众所周知现在Python很火,在PC时代大量的嵌入式的设备,底层的代码,以及桌面的应用都是用C,C++实现的,毋庸置疑他们是最接近底层,也是最快的。随着2000年左右电商的大规模的兴起,逐渐的从PC时... 查看详情
v7包下的linearlayoutcompat(代码片段)
在平时的开发当中,我们经常会有这样的需求那就是在布局当中使用分割线区分每个Item布局,如下代码:效果如图1-1<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com... 查看详情
号外号外:9月21号关于speed-bi《全国人口统计数据分析》开讲了
引言:如何快速分析纷繁复杂的数据?如何快速做出老板满意的报表?如何快速将Speed-BI云平台运用到实际场景中? 本课程将通过各行各业案例背景,将Speed-BI云平台运用到实际场景中,通过熟练使用云平台可... 查看详情
注意了,号外,号外,年终奖领完想跳槽?先来看看这份程序员薪资调查报告
随着AI、大数据、云计算、5G技术的成熟,各类技术人才成为各大行业争夺重点。据相关数据显示,大数据方面人才的需求,66%来自于信息技术行业,其他需求来源,则分布于智能制造、金融、地产、现代服务... 查看详情
删除 R 中除撇号外的所有标点符号
】删除R中除撇号外的所有标点符号【英文标题】:RemoveallpunctuationexceptapostrophesinR【发布时间】:2012-01-3114:18:31【问题描述】:我想使用R的gsub从文本中删除除撇号之外的所有标点符号。我对正则表达式相当陌生,但正在学习。... 查看详情
号外!gnome3.22正式发布喽!!!
导读经过半年的努力开发,别名为“卡尔斯鲁厄”的GNOME3.22正式发布了!“GNOMESoftware可以安装和更新Flatpak软件包,GNOMEBuilder则可以创建它们,而桌面则为沙盒化的应用提供了可移植的实现。对于核心的GNOME应用的改进... 查看详情
号外!gnome3.22正式发布喽!!!
导读经过半年的努力开发,别名为“卡尔斯鲁厄”的GNOME3.22正式发布了!“GNOMESoftware可以安装和更新Flatpak软件包,GNOMEBuilder则可以创建它们,而桌面则为沙盒化的应用提供了可移植的实现。对于核心的GNOME应用的改进... 查看详情
号外:思科认证10年以来重大更新
先上一张图:然后先挑重点的说:1:CCIE认证中的经典方向,RS-CCIE退出思科认证历史舞台,取而代之的是:CCIEEnterpriseInfrastructure(企业基础架构)2:CCNP的方向和CCIE是匹配的,详见上图,没什么要说的3:变化最大的是CCNA,以前... 查看详情
号外:我开通了英语专栏
前言此专栏大约更新三年,三年时间希望有缘人可以通过这个专栏变成英语达人。能够灵活应对日常的外企工作,看懂英文官方文档。作为一个技术人,英语并不是我的专业,但我是一个在英语的路上走了很多弯路的人。我发现... 查看详情
zigbee技术入门教程-号外基于z-stack协议栈的抢答系统
【Zigbee技术入门教程-号外】基于Z-Stack协议栈的抢答系统广东职业技术学院 欧浩源一、引言 2017年全国职业院校技能大赛“物联网技术应用”赛项中任务三题2的“抢答器开发”是一个非常优秀的题目。本人对题目进... 查看详情
号外:splashtop与jira发布新的远程支持集成
首先个跟大家道个歉,近期最近因为技术调整等原因,官网自动跳转中文站失效,可能很多宝宝看了一周的英文站了。程序哥们还在加班加点解决这个问题。如果大佬们也遇到了这个情况,官网后面加个/cn就可以了。别问我为啥... 查看详情
android学习笔记--design包下的两个控件
今天学习了design包下的两个控件,记录一下,首先需要我们依赖1compile‘com.android.support:design:25.0.0‘之后在XML文件中就可以使用了1<?xmlversion="1.0"encoding="utf-8"?>2<RelativeLayoutxmlns:android="http://schemas.android.com/apk/re 查看详情
大厂面试快问快答,10分钟搞定mysql夺命20问,你都能接住吗?(代码片段)
号外号外!《死磕Java并发编程》系列连载中,大家可以关注一波:「死磕Java并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁「死磕Java并发编程04」说说JavaAtomic原子类的实现原理「死磕Java并发编程03... 查看详情
大厂面试快问快答,10分钟搞定mysql夺命20问,你都能接住吗?(代码片段)
号外号外!《死磕Java并发编程》系列连载中,大家可以关注一波:「死磕Java并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁「死磕Java并发编程04」说说JavaAtomic原子类的实现原理「死磕Java并发编程03... 查看详情
braf基因第15号外显子呈突变型是啥意思呢?
就是B-Raf(Raffamily)这个基因所属片段中的第15号外显子发生了突变。外显子是已知的人们发现有编码蛋白功能的基因,第15号是按顺序排列的。既存在于最初的转录产物中,也存在于成熟的RNA分子中的核苷酸序列。术语外显子也指... 查看详情
[死磕spring01/43]号外04容器初始化过程(代码片段)
参考代码:【Spring】IOC核心源码学习(二):容器初始化过程https://www.iteye.com/blog/singleant-1177358ClassPathXmlApplicationContext类体系结构以下是ClassPathXmlApplicationContext的类继承体系结构,理解这个结构有助于后面的代... 查看详情