Android CardView 和Material Design风格设计学习
来源:互联网 发布:apache服务器搭建 编辑:程序博客网 时间:2024/05/20 03:08
这篇文章主要介绍一下我自己对于CardView和Material Design学习的过程。学习途径主要是通过书本和网上资料学习。
效果图:
说明一下,通过下拉可以让我们宇宙的图片拉伸延展出来,通过上滑,可以让我们宇宙图片逐渐变换成ToolBar样式。
一.什么是Material Design:
Material Design,中文名:材料设计语言,是由Google推出的全新的设计语言,谷歌表示,这种设计语言旨在为手机、平板电脑、台式机和“其他平台”提供更一致、更广泛的“外观和感觉”。
个人感觉这样的界面设计可以使得我们的APP界面更加的统一和美观。
二.什么是CardView:
卡片布局,从名字中就能感受到界面的划分以卡片形式为主,并且通过其属性设置,可以更大程度上满足我们对于卡片界面的设计。
三.学习过程:
首先我们先添加依赖:
compile 'com.android.support:recyclerview-v7:25.1.1' compile 'com.android.support:cardview-v7:25.1.1' compile 'com.github.githubwing:ByeBurger:1.2.3'
这部分依赖是用于cardview和recyclerview包括coordinationlayout的依赖。
然后看一下布局文件:
recycler_view_item:
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_margin="5dp" android:clickable="true" app:cardElevation="5dp" android:foreground="?attr/selectableItemBackground" app:cardCornerRadius="2dp"><LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <ImageView android:id="@+id/fruit_image" android:layout_width="match_parent" android:layout_height="100dp" android:scaleType="center"/> <TextView android:id="@+id/fruit_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:textSize="16sp" android:layout_gravity="center"/></LinearLayout></android.support.v7.widget.CardView>
可以看到,我们外层布局采用的是cardview布局,我们设置了它的阴影,圆角和边距,然后下面的控件就是具体item中显示的控件了。
这个布局文件也是我们图一种Recycler的Item的布局样式。
activity_main:
<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.learncardview.MainActivity"> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"><android.support.v7.widget.Toolbar android:id="@+id/tool_bar" android:layout_width="match_parent" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways|snap" android:layout_height="?attr/actionBarSize"/> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </android.support.v7.widget.RecyclerView> </android.support.design.widget.CoordinatorLayout></android.support.v4.widget.DrawerLayout>
MainActivity的布局样式,这里面我们按照以前一样,放置了RecyclerView,然后可以看到我们的外层布局采用的是DrawerLayout.
<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent">
这个布局可以达到上滑隐藏toolbar和下拉显示toolbar的效果,然后我们用到了AppBarLayout
这个也是和CoordinatorLayout配套使用的。通过它在里面我们就可以包裹我们的Toolbar来达到隐藏Toolbar和显示ToolBar的效果了。
接了下来我恩 我们ToolBar的设置:
<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"><android.support.v7.widget.Toolbar android:id="@+id/tool_bar" android:layout_width="match_parent" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:layout_scrollFlags="scroll|enterAlways|snap" android:layout_height="?attr/actionBarSize"/> </android.support.design.widget.AppBarLayout>
设置它的popup主题风格
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
设置它的滑动标志:
app:layout_scrollFlags="scroll|enterAlways|snap"
这里的三个参数,scroll代表Recyclerview在向上滚动的时候Toolbar会一起向上滚动并且隐藏。enterAlways代表RecyclerView在向下滚动的时候Toolbar会随着Recycler的滚动而显示,而snap代表着,Toolbar会跟根据RecyclerView的滚动距离选择一个合适自己的状态进行隐藏或者显示。
这里ToolBar的设置就这么多了,然后我们在看看RecyclerView的属性设置。
<android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </android.support.v7.widget.RecyclerView>
可以看到我们有一句:
app:layout_behavior="@string/appbar_scrolling_view_behavior">
这里是设置RecyclerView的布局行为
这两个布局的效果就相当于设置了我们第一个界面的布局:
接下来我们看看跳转后的界面布局:
friut_activity:
<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" xmlns:app="http://schemas.android.com/apk/res-auto"><android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:fitsSystemWindows="true" android:layout_height="235dp"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsongbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed" > <ImageView android:fitsSystemWindows="true" android:id="@+id/iamge_fruit" android:scaleType="centerCrop" android:layout_width="match_parent" android:layout_height="match_parent" android:src="@mipmap/sky1" app:layout_collapseMode="parallax"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin"> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout></android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="15dp" android:layout_marginLeft="15dp" android:layout_marginRight="15dp" android:layout_marginTop="35dp" app:cardCornerRadius="4dp" > <TextView android:id="@+id/fruit_textview" android:layout_width="wrap_content" android:layout_margin="10dp" android:layout_height="wrap_content" /> </android.support.v7.widget.CardView> </LinearLayout> </android.support.v4.widget.NestedScrollView></android.support.design.widget.CoordinatorLayout>
这个布局就较为复杂了,让我们看看他的控件和属性设置吧。
最外层布局还是coor所以就不多说了。
这里我们引入了一个新的布局叫做CollapsingToolbarLayout
它是一个作用于Toolbar基础之上的布局。我们称他为可折叠标题栏。
他是不能独立存在的,用它的时候也是将它作文AppBarLayout的直接子布局使用。
接下来我们看一下CollapsingToolbarLayout的属性设置:
<android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsongbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed" >
我们可以看到两个属性:
app:contentScrim="?attr/colorPrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"
这里的contentScrim的作用就是用于指定可折叠标题栏在折叠之后的背景颜色。
scrollFlage中的参数,前面第一个已经说过了,而后面的exitUntilCollapsed表示CollapsingToolBarLayout会随着滚动完成折叠之后保留在屏幕上,不会移出屏幕。
CollapsingToolBarLayout的布局里我们放置了用于显示在标题栏拉伸后的图片,和一个Toolbar
这个布局的设置就相当于我们设置好了跳转后的布局:
下载我们看一下主要代码:
Adapter:
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { List<String> infos; public Adapter(List<String> infos) { this.infos = infos; } /* * 子布局创建时候对其进行布局绑定和Item的点击事件的设置 * */ @Override public ViewHolder onCreateViewHolder(final ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_item, parent, false); ViewHolder holder = new ViewHolder(view); holder.cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(parent.getContext(), FruitActivity.class); parent.getContext().startActivity(intent); } }); return holder; } /* * 子布局控件的数据设置 * */ @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.image.setImageResource(R.mipmap.ic_launcher); holder.text.setText(infos.get(position).toString()); } @Override public int getItemCount() { return infos.size(); } /* * 子布局控件的初始化 * */ static class ViewHolder extends RecyclerView.ViewHolder { public ImageView image; public TextView text; public CardView cardView; public ViewHolder(View itemView) { super(itemView); image = (ImageView) itemView.findViewById(R.id.fruit_image); text = (TextView) itemView.findViewById(R.id.fruit_name); cardView = (CardView) itemView.findViewById(R.id.card_view); } }}
FriutActivity
public class FruitActivity extends AppCompatActivity { TextView textView; ImageView imageView; String x; protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.friut_activity); Toolbar bar = (Toolbar) findViewById(R.id.toolbar); CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsongbar); imageView = (ImageView) findViewById(R.id.iamge_fruit); textView = (TextView) findViewById(R.id.fruit_textview); setSupportActionBar(bar);//设置默认标题栏 ActionBar actionBar = getSupportActionBar(); if(actionBar!=null){ actionBar.setDisplayHomeAsUpEnabled(true); } loadData(); collapsingToolbarLayout.setTitle("Firut Name");//设置标题 imageView.setImageResource(R.mipmap.sky);//设置标题栏找票 textView.setText(x);//文本信息 } /* * 用于数据展示, 我们通过StringBuilder 重复添加500次数据保存给x * */ public void loadData(){ StringBuilder y = new StringBuilder(); for(int i =0;i<=500;i++){ y.append("asdasdasdsadsadsadasdasdsadasdascxzcsafdafasdadas"); } x = y.toString(); }}
MainActivity
package com.example.administrator.learncardview;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.GridLayoutManager;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Toolbar;import android.view.Menu;import android.view.MenuItem;import android.widget.Toast;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { RecyclerView rc; List<String> infos = new ArrayList<String>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar); setSupportActionBar(toolbar);//系统标题栏设置 rc = (RecyclerView) findViewById(R.id.recycler_view); loadData(); Adapter adapter = new Adapter(infos); GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2);//GridLlayout样式 rc.setLayoutManager(gridLayoutManager); rc.setAdapter(adapter); } /* * 数据读取 * */ public void loadData(){ for(int i = 0 ;i<=20;i++){ infos.add("香蕉香蕉"+i); } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.setting: Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show(); break; case R.id.back: Toast.makeText(this, "back", Toast.LENGTH_SHORT).show(); break; case R.id.exit: Toast.makeText(this, "setting", Toast.LENGTH_SHORT).show(); break; } return true; }}
代码里我都有注释,代码的设计并没有很难。都是比较简单的。
仅仅是为了记录自己的学习过程,代码不是很规范,如果有什么错误的话,请大神多多包含。
学习过程主要是通过网上资料和郭霖著第一行代码中。
推荐郭霖<第一行代码>给大家,个人比较喜欢这本书的讲解风格。因人而异吧。
- Android CardView 和Material Design风格设计学习
- Android Material design设计风格
- Android Material Design学习之四CardView
- Android Material Design 之 CardView
- Android Material Design系列之RecyclerView和CardView
- Android Material Design(3) CardView的使用
- Material Design - RecyclerView和CardView篇
- Android MVP设计模式登录具体实现Material Design风格
- Material Design之CardView
- Android L metral design风格之CardView
- Android Design风格组件之CardView
- Material Design 设计风格进阶篇 <一>
- Material Design 设计风格进阶篇 <二>
- Material Design ui设计风格详解
- Android Material Design之在RecyclerView中嵌套CardView实现
- Android中级开发之Material Design-CardView初探
- Android Study Material Design 十一 之CardView窥探
- Android Design - 设计风格
- threejs在线编辑器
- python升级2.6.6-->2.7.3引起的pip和easy_install执行错误
- Bootstrap警告面板
- 动效神器 Origami Studio 汉化
- Spring Boot 运行原理
- Android CardView 和Material Design风格设计学习
- 二叉排序树的实现
- Android 利用layoutParams代码动态布局空间位置
- 字符串匹配-KMP
- 华为手机logcat不出日志解决方案
- Ubuntu
- Linux安装apache详解
- javascript第5章
- View页面间的跳转