Android CardView 和Material Design风格设计学习
2017-04-26 17:08
656 查看
这篇文章主要介绍一下我自己对于CardView和Material Design学习的过程。学习途径主要是通过书本和网上资料学习。
效果图:
说明一下,通过下拉可以让我们宇宙的图片拉伸延展出来,通过上滑,可以让我们宇宙图片逐渐变换成ToolBar样式。
一.什么是Material Design:
Material Design,中文名:材料设计语言,是由Google推出的全新的设计语言,谷歌表示,这种设计语言旨在为手机、平板电脑、台式机和“其他平台”提供更一致、更广泛的“外观和感觉”。
个人感觉这样的界面设计可以使得我们的APP界面更加的统一和美观。
二.什么是CardView:
卡片布局,从名字中就能感受到界面的划分以卡片形式为主,并且通过其属性设置,可以更大程度上满足我们对于卡片界面的设计。
三.学习过程:
首先我们先添加依赖:
这部分依赖是用于cardview和recyclerview包括coordinationlayout的依赖。
然后看一下布局文件:
recycler_view_item:
可以看到,我们外层布局采用的是cardview布局,我们设置了它的阴影,圆角和边距,然后下面的控件就是具体item中显示的控件了。
这个布局文件也是我们图一种Recycler的Item的布局样式。
activity_main:
MainActivity的布局样式,这里面我们按照以前一样,放置了RecyclerView,然后可以看到我们的外层布局采用的是DrawerLayout.
这个布局可以达到上滑隐藏toolbar和下拉显示toolbar的效果,然后我们用到了AppBarLayout
这个也是和CoordinatorLayout配套使用的。通过它在里面我们就可以包裹我们的Toolbar来达到隐藏Toolbar和显示ToolBar的效果了。
接了下来我恩 我们ToolBar的设置:
设置它的popup主题风格
设置它的滑动标志:
这里的三个参数,scroll代表Recyclerview在向上滚动的时候Toolbar会一起向上滚动并且隐藏。enterAlways代表RecyclerView在向下滚动的时候Toolbar会随着Recycler的滚动而显示,而snap代表着,Toolbar会跟根据RecyclerView的滚动距离选择一个合适自己的状态进行隐藏或者显示。
这里ToolBar的设置就这么多了,然后我们在看看RecyclerView的属性设置。
可以看到我们有一句:
这里是设置RecyclerView的布局行为
这两个布局的效果就相当于设置了我们第一个界面的布局:
接下来我们看看跳转后的界面布局:
friut_activity:
这个布局就较为复杂了,让我们看看他的控件和属性设置吧。
最外层布局还是coor所以就不多说了。
这里我们引入了一个新的布局叫做CollapsingToolbarLayout
它是一个作用于Toolbar基础之上的布局。我们称他为可折叠标题栏。
他是不能独立存在的,用它的时候也是将它作文AppBarLayout的直接子布局使用。
接下来我们看一下CollapsingToolbarLayout的属性设置:
我们可以看到两个属性:
这里的contentScrim的作用就是用于指定可折叠标题栏在折叠之后的背景颜色。
scrollFlage中的参数,前面第一个已经说过了,而后面的exitUntilCollapsed表示CollapsingToolBarLayout会随着滚动完成折叠之后保留在屏幕上,不会移出屏幕。
CollapsingToolBarLayout的布局里我们放置了用于显示在标题栏拉伸后的图片,和一个Toolbar
这个布局的设置就相当于我们设置好了跳转后的布局:
下载我们看一下主要代码:
Adapter:
FriutActivity
MainActivity
代码里我都有注释,代码的设计并没有很难。都是比较简单的。
仅仅是为了记录自己的学习过程,代码不是很规范,如果有什么错误的话,请大神多多包含。
学习过程主要是通过网上资料和郭霖著第一行代码中。
推荐郭霖<第一行代码>给大家,个人比较喜欢这本书的讲解风格。因人而异吧。
效果图:
说明一下,通过下拉可以让我们宇宙的图片拉伸延展出来,通过上滑,可以让我们宇宙图片逐渐变换成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.AppCom 10cef pat.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 Material Design学习之四CardView
- 学习Android界面设计的超级利器HierarchyView.bat
- Android 5.0学习之CardView
- Android 5.0后Material design icons(金属设计风格图标大全)及如何使用
- 【转】Android 使用CardView轻松实现卡片式设计
- Android学习之CardView
- 学习Android界面设计的超级利器HierarchyView.bat
- 学习Android界面设计的超级利器HierarchyView.bat
- Android Design风格组件之CardView
- 一款 Material Design 风格的 AndroidRank 干货学习客户端
- 学习使用Material Design控件(三)使用CardView实现卡片效果
- Android 自定义View学习(3)--仿IOS风格滑动按钮
- Android Material Design之在RecyclerView中嵌套CardView实现
- Android MVP设计模式登录具体实现Material Design风格
- [Android UI界面] 转:学习Android界面设计的超级利器HierarchyView.bat
- ym—— Android 5.0学习之CardView
- Android Material Design学习之RecyclerView代替 ListView
- 学习Android Material Design(RecyclerView代替ListView)
- Android客户端之“微服私访”App的系统学习(六)RecyclerView 展现复杂数据列表以及水波纹效果+CardView显示头像
- Android——RecyclerView和CardView的学习