2019独角兽企业重金招聘Python工程师标准>>>

Android L 开发者预览支持库提供两个新的Widgets,RecyclerView和CardView。使用这两个Widgets可以显示复杂的Listview和卡片布局,这两个Widgets默认使用Material design。

RecyclerView

RecyclerView是一个更高级柔性版本的Listview,RecyclerView是一个能包含很多视图的容器,它能完美的处理循环和滚动。在item动态变化的Listview使用RecyclerView。

RecyclerView使用很简单,因为它提供了:

1、定位item的布局管理器

2、常见的item操作默认动画

你能够灵活的为RecyclerView自定义布局管理器和动画。

使用RecyclerView,必须使用指定一个adapter、定义一个布局管理器。创建adapter必须继承自RecyclerView.Adapter。实施的细节需要看数据类型和需要的视图。

RecyclerView widget

RecyclerView 提供了 LayoutManager,RecylerView 不负责子 View 的布局

目前提供了

LinearLayoutManager(显示垂直或水平滚动列表中的条目。)

GridLayoutManager(在一个网格显示项)

StaggeredGridLayoutManager(在交错网格显示项。)

以上如果不满足要求,那么你可以继承RecyclerView.LayoutManager

Animations

动画添加和删除项目在RecyclerView默认启用。自定义动画只需要继承RecyclerView.ItemAnimator类并使用RecyclerView.setItemAnimator()方法。

使用:

studio build.gradle  添加

dependencies {compile 'com.android.support:recyclerview-v7:22.2.0’
}

RecyclerView Demo:

1、布局文件

<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerViewandroid:id="@+id/my_recycler_view"android:scrollbars="vertical"android:layout_width="match_parent"android:layout_height="match_parent"/>

2、Activity文件

public class MyActivity extends Activity {private RecyclerView mRecyclerView;private RecyclerView.Adapter mAdapter;private RecyclerView.LayoutManager mLayoutManager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.my_activity);mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);// improve performance if you know that changes in content// do not change the size of the RecyclerViewmRecyclerView.setHasFixedSize(true);// use a linear layout managermLayoutManager = new LinearLayoutManager(this);mRecyclerView.setLayoutManager(mLayoutManager);// specify an adapter (see also next example)mAdapter = new MyAdapter(myDataset);mRecyclerView.setAdapter(mAdapter);}...
}
To create a simple adapter:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {private String[] mDataset;// Provide a reference to the type of views that you are using// (custom viewholder)public static class ViewHolder extends RecyclerView.ViewHolder {public TextView mTextView;public ViewHolder(TextView v) {super(v);mTextView = v;}}// Provide a suitable constructor (depends on the kind of dataset)public MyAdapter(String[] myDataset) {mDataset = myDataset;}// Create new views (invoked by the layout manager)@Overridepublic MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {// create a new viewView v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, null);// set the view's size, margins, paddings and layout parameters...ViewHolder vh = new ViewHolder(v);return vh;}// Replace the contents of a view (invoked by the layout manager)@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {// - get element from your dataset at this position// - replace the contents of the view with that elementholder.mTextView.setText(mDataset[position]);}// Return the size of your dataset (invoked by the layout manager)@Overridepublic int getItemCount() {return mDataset.length;}
}

3、Recycler adapter

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {private String[] mDataset;// Provide a reference to the type of views that you are using// (custom viewholder)public static class ViewHolder extends RecyclerView.ViewHolder {public TextView mTextView;public ViewHolder(TextView v) {super(v);mTextView = v;}}// Provide a suitable constructor (depends on the kind of dataset)public MyAdapter(String[] myDataset) {mDataset = myDataset;}// Create new views (invoked by the layout manager)@Overridepublic MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {// create a new viewView v = LayoutInflater.from(parent.getContext()).inflate(R.layout.my_text_view, null);// set the view's size, margins, paddings and layout parameters...ViewHolder vh = new ViewHolder(v);return vh;}// Replace the contents of a view (invoked by the layout manager)@Overridepublic void onBindViewHolder(ViewHolder holder, int position) {// - get element from your dataset at this position// - replace the contents of the view with that elementholder.mTextView.setText(mDataset[position]);}// Return the size of your dataset (invoked by the layout manager)@Overridepublic int getItemCount() {return mDataset.length;}
}

RecyclerView 的标准化了 ViewHolder, 编写 Adapter 面向的是 ViewHoder 而不在是View 了, 复用的逻辑被封装了, 写起来更加简单。

CardView

CardView继承自FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。

可以使用android:cardElevation属性,创建一个阴影的卡片。

怎样指定CardView的属性:

1、使用android:cardCornerRadius属性指定圆角半径

2、使用CardView.setRadius 设置圆角半径。

3、使用 android:cardBackgroundColor属性设置卡片颜色

studio build.gradle  添加

dependencies {compile 'com.android.support:cardview-v7:22.2.0’
}

在创建布局文件中创建CardView:

<!-- A CardView that contains a TextView -->
<android.support.v7.widget.CardViewxmlns:card_view="http://schemas.android.com/apk/res-auto"android:id="@+id/card_view"android:layout_gravity="center"android:layout_width="200dp"android:layout_height="200dp"card_view:cardCornerRadius="4dp"><TextViewandroid:id="@+id/info_text"android:layout_width="match_parent"android:layout_height="match_parent" />
</android.support.v7.widget.CardView>

官方文档可参看:https://developer.android.com/intl/zh-CN/training/material/lists-cards.html

Palette

根据图片来决定标题的颜色和标题栏的背景色,这样视觉上更具有冲击力和新鲜感,而不像统一色调那样呆板。

大家想知道这个效果如何实现的吗?

学习Palette轻轻松松搞定此效果哦~!

Palette是什么?

它能让你从图像中提取突出的颜色。这个类能提取以下突出的颜色:

Vibrant(充满活力的)

Vibrant dark(充满活力的黑)

Vibrant light(充满活力的亮)

Muted(柔和的)

Muted dark(柔和的黑)

Muted lighr(柔和的亮)

如何使用?

Android Studio 要在你的项目中使用Palette类,增加下面的Gradle依赖到你的程序的模块(module)中:

dependencies {compile 'com.android.support:palette-v7:22.2.0'
}

相关代码

//获取一张位图
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.img_test);//获取一个Builder
Palette.Builder from = Palette.from(bitmap);//生成颜色 Builder.generate().getter方法 这里简单演示
int color =from.generate().getDarkVibrantColor(getResources().getColor(android.R.color.transparent));mHead.setBackgroundColor(color);

如果是Eclipse首先我们找到sdk/extras/android/support/v7/palette/libs/android-support-v7-palette.jar导入我们的工程。

转载于:https://my.oschina.net/kooeasy/blog/484115

Android 5.0+(RecycleView、CardView、Palette)相关推荐

  1. 【高通SDM660平台 Android 10.0】(19) --- Camera_focus、Camera_snapshot、volume_up 按键工作原理分析

    [高通SDM660平台 Android 10.0]19 --- Camera_focus.Camera_snapshot.volume_up 按键工作原理分析 一. DTS代码配置 二. Kernel ...

  2. Android 8.0 状态栏信号显示、信号定制

    之前发了下拉通知栏开关修改的一篇文章. 这篇文章呢,主要介绍一下Android状态栏信号图标显示的流程. 便于在Android源生上开发的碰到问题的朋友,希望能对读者有所帮助.内容可能比较长 首先还是 ...

  3. 小米7.0 android 图片裁剪失败,Android 7.0适配 -- FileProvider 拍照、选择相册、裁切图片, 小米机型适配...

    需求: 最近把APP的TargetSdk从21提高至25后,测试时, 在Android7.0以上的系统上,爆出了一些异常. 在个别小米等机型也存在一些异常. 问题分析: FileUriExposedE ...

  4. Nexus 5 Android 6.0.1刷机、Root

    一.     准备 1.      备份通讯录等数据,切记. 2.      准备adb .fastboot.网上搜索可以下载到,如果已安装Android开发环境,可直接使用android-sdk\p ...

  5. 红米4 android 6.0,红米Note 4、红米4依旧有可看的配置,还预置Android 6.0?

    小米在前段时间推出了红米系列的高端机红米Pro,希望能拉高整体手机产品的定位,而作为小米销量主力之一的红米Note系列也将迎来新机红米Note 4,处理器配置够高,但没有双摄像头,另外还有新款红米4, ...

  6. Android 5.0+ 解析(三)Palette类

    1.Palette简单介绍 Palette中文翻译:调色板,android系统允许我们动态的获取图片或者控件的颜色,来为布局控件提供颜色,保持统一的外观颜色值. 使用Palette需要到sdk\ext ...

  7. android 5.0+原生质设计,cardview、Recyclerview、百分比布局PercentRelativeLayout简单使用

    Android 5.0出来已经快一年时间了,全新的系统采用Material Design设计,耳目一新的感觉,当然新系统的出来也增加了新的API为开发带来便捷,现在就说说新出的几个控件,cardvie ...

  8. 程序员快放弃 Android 9.0 吧,10.0 正在来的路上!

    本文经授权转自终端研发部(ID:codeGoogler) 目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 An ...

  9. 还在期待安卓9.0吗?Android 10.0要来了

    目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 Android 9.0 系统(修改UI界面也算是二次开发,嗯) ...

最新文章

  1. 2020年AI怎么发展?听加州大学、谷歌、英伟达、IBM怎么说
  2. 掩耳盗铃之使用WebBrowser封装网页
  3. 在Windows上使用putty连接一台Linux主机
  4. Java web 初入
  5. netty客户端源码
  6. 爱的回忆(散文诗 长篇连载)
  7. 通勤一小时,堵车半小时,AI 救救社畜
  8. 解决sendmail服务启动慢的方法
  9. 《跑跑卡丁车》国内运营商裁员超30%
  10. ProGuard:类混淆,类的指定函数保留
  11. android 投屏原理图,什么是投屏功能,手机投屏原理介绍
  12. 河北科怡档案管理系统连接服务器,档案信息管理系统web端使用说明.docx
  13. Matlab中统计灰度值出现的次数
  14. python四级是什么水平_四级能过的水平大概什么水平?
  15. 1419:SPFA(II)
  16. 中国移动H1S-3光猫首发破解路由器桥接教程
  17. AWS DynamoDB基础使用
  18. VisualC++逆序存放
  19. java毕业设计宝马官网Mybatis+系统+数据库+调试部署
  20. 锂电池的正确使用:标称容量、存储条件及充放电

热门文章

  1. 数据保护法规可被滥用于人肉 GitLab 用户和接管账户
  2. 黑客可利用 TeamViewer 缺陷远程窃取系统密码
  3. 记录 || 雨后王母山仙境
  4. python os详解
  5. python 闭包和装饰器
  6. Django最新版(1.10.5)在SAE上面部署流程
  7. Qt Model/View/Delegate浅谈 - QAbstractListModel
  8. jvm垃圾收集器与内存分配策略
  9. 【经典算法】第三回:插入排序
  10. win7和win8双系统的问题