Android 5.0+(RecycleView、CardView、Palette)
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)相关推荐
- 【高通SDM660平台 Android 10.0】(19) --- Camera_focus、Camera_snapshot、volume_up 按键工作原理分析
[高通SDM660平台 Android 10.0]19 --- Camera_focus.Camera_snapshot.volume_up 按键工作原理分析 一. DTS代码配置 二. Kernel ...
- Android 8.0 状态栏信号显示、信号定制
之前发了下拉通知栏开关修改的一篇文章. 这篇文章呢,主要介绍一下Android状态栏信号图标显示的流程. 便于在Android源生上开发的碰到问题的朋友,希望能对读者有所帮助.内容可能比较长 首先还是 ...
- 小米7.0 android 图片裁剪失败,Android 7.0适配 -- FileProvider 拍照、选择相册、裁切图片, 小米机型适配...
需求: 最近把APP的TargetSdk从21提高至25后,测试时, 在Android7.0以上的系统上,爆出了一些异常. 在个别小米等机型也存在一些异常. 问题分析: FileUriExposedE ...
- Nexus 5 Android 6.0.1刷机、Root
一. 准备 1. 备份通讯录等数据,切记. 2. 准备adb .fastboot.网上搜索可以下载到,如果已安装Android开发环境,可直接使用android-sdk\p ...
- 红米4 android 6.0,红米Note 4、红米4依旧有可看的配置,还预置Android 6.0?
小米在前段时间推出了红米系列的高端机红米Pro,希望能拉高整体手机产品的定位,而作为小米销量主力之一的红米Note系列也将迎来新机红米Note 4,处理器配置够高,但没有双摄像头,另外还有新款红米4, ...
- Android 5.0+ 解析(三)Palette类
1.Palette简单介绍 Palette中文翻译:调色板,android系统允许我们动态的获取图片或者控件的颜色,来为布局控件提供颜色,保持统一的外观颜色值. 使用Palette需要到sdk\ext ...
- android 5.0+原生质设计,cardview、Recyclerview、百分比布局PercentRelativeLayout简单使用
Android 5.0出来已经快一年时间了,全新的系统采用Material Design设计,耳目一新的感觉,当然新系统的出来也增加了新的API为开发带来便捷,现在就说说新出的几个控件,cardvie ...
- 程序员快放弃 Android 9.0 吧,10.0 正在来的路上!
本文经授权转自终端研发部(ID:codeGoogler) 目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 An ...
- 还在期待安卓9.0吗?Android 10.0要来了
目前,美国 Google公司的 AndroidP (安卓9.0),已经正式全面推出有几个多月了.众多手机品牌厂商也都在积极的进行更新适配 Android 9.0 系统(修改UI界面也算是二次开发,嗯) ...
最新文章
- 2020年AI怎么发展?听加州大学、谷歌、英伟达、IBM怎么说
- 掩耳盗铃之使用WebBrowser封装网页
- 在Windows上使用putty连接一台Linux主机
- Java web 初入
- netty客户端源码
- 爱的回忆(散文诗 长篇连载)
- 通勤一小时,堵车半小时,AI 救救社畜
- 解决sendmail服务启动慢的方法
- 《跑跑卡丁车》国内运营商裁员超30%
- ProGuard:类混淆,类的指定函数保留
- android 投屏原理图,什么是投屏功能,手机投屏原理介绍
- 河北科怡档案管理系统连接服务器,档案信息管理系统web端使用说明.docx
- Matlab中统计灰度值出现的次数
- python四级是什么水平_四级能过的水平大概什么水平?
- 1419:SPFA(II)
- 中国移动H1S-3光猫首发破解路由器桥接教程
- AWS DynamoDB基础使用
- VisualC++逆序存放
- java毕业设计宝马官网Mybatis+系统+数据库+调试部署
- 锂电池的正确使用:标称容量、存储条件及充放电