Android实现简单卡片布局

GoogleNow是Android4.1全新推出的一款应用他,它可以全面了解你的使用习惯,并为你提供现在或者未来可能用到的各种信息,GoogleNow提供的信息关联度较高,几乎是瞬间返回答案,总而言之,GoogleNow是Google提出的全新搜索概念。当然,GoogleNow最为引人注目的当属它的卡片式设计。Google自家应用纷纷采用卡片布局(Google Now,Google Plus,Google Play)。

在最新的QQ空间、新浪微博、豌豆荚中也可以见到卡片式设计的影子

下面介绍一种简单实现卡片布局的方式

list_item.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 tools:context=".MainActivity"
 android:background="@drawable/radius_bg">

 <ImageView
 android:id="@+id/iv_logo"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignParentLeft="true"
 android:layout_margin="8dp"
 android:src="@drawable/ic_launcher" />

 <TextView
 android:id="@+id/tv_name"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignTop="@id/iv_logo"
 android:layout_toRightOf="@id/iv_logo"
 android:text="@string/hello_world"
 android:textSize="16sp" />

 <TextView
 android:id="@+id/tv_desc"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_below="@id/tv_name"
 android:layout_marginTop="5dp"
 android:layout_toRightOf="@id/iv_logo"
 android:text="@string/hello_world"
 android:textSize="13sp" />

</RelativeLayout>

自定义Shape图片radius_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
 <corners android:radius="3dp"/>
 <solid android:color="#ffffff"/>
</shape>

主界面布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity"
 android:background="#e6e6e6">

 <ListView
 android:id="@+id/mListView"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:divider="@android:color/transparent"
 android:paddingLeft="10dp"
 android:paddingRight="10dp"
 android:paddingTop="2dp"
 android:paddingBottom="2dp"
 android:dividerHeight="10dp" >
 </ListView> 

</RelativeLayout>

Card实体

package com.example.carduitest.model;

public class Card {
 private String name;
 private String desc;
 private int icon;

 public Card(String name, String desc) {
 this.name = name;
 this.desc = desc;
 }

 public String getName() {
 return name;
 }
 public void setName(String name) {
 this.name = name;
 }
 public String getDesc() {
 return desc;
 }
 public void setDesc(String desc) {
 this.desc = desc;
 }
 public int getIcon() {
 return icon;
 }
 public void setIcon(int icon) {
 this.icon = icon;
 }
}

自定义适配器

package com.example.carduitest.adapter;

import java.util.List;

import com.example.carduitest.R;
import com.example.carduitest.model.Card;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class CardAdapter extends BaseAdapter {
 private List<Card> data;
 private Context context;
 private LayoutInflater mInflater;

 public CardAdapter(List<Card> data, Context context) {
 this.data = data;
 this.context = context;
 mInflater = LayoutInflater.from(context);
 }

 @Override
 public int getCount() {
 // TODO Auto-generated method stub
 return data.size();
 }

 @Override
 public Object getItem(int position) {
 // TODO Auto-generated method stub
 return data.get(position);
 }

 @Override
 public long getItemId(int position) {
 // TODO Auto-generated method stub
 return position;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
 ViewHolder holder;
 if(convertView==null){
 convertView = mInflater.inflate(R.layout.list_item, null);

 holder = new ViewHolder();
 holder.tv_name = (TextView) convertView.findViewById(R.id.tv_name);
 holder.tv_desc = (TextView) convertView.findViewById(R.id.tv_desc);

 convertView.setTag(holder);
 }else{
 holder = (ViewHolder) convertView.getTag();
 }

 Card card = data.get(position);
 holder.tv_name.setText(card.getName());
 holder.tv_desc.setText(card.getDesc());

 return convertView;
 }

 static class ViewHolder{
 TextView tv_name;
 TextView tv_desc;
 }

}
package com.example.carduitest;

import java.util.ArrayList;
import java.util.List;

import com.example.carduitest.adapter.CardAdapter;
import com.example.carduitest.model.Card;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;

public class MainActivity extends Activity {

 private List<Card> data = new ArrayList<Card>();

 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 initData();
 ListView mListView = (ListView) findViewById(R.id.mListView);

 CardAdapter mAdapter = new CardAdapter(data,this);
 mListView.setAdapter(mAdapter);
 }

 private void initData() {

 for(int i=0;i<50;i++){
 Card card = new Card("Card UI Example "+i, "Very Good");
 data.add(card);
 }
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
 // Inflate the menu; this adds items to the action bar if it is present.
 getMenuInflater().inflate(R.menu.main, menu);
 return true;
 }

}

运行效果如下:

p>

当然啦,Github上面也有专门的实现card的library,这里列举两个不错的library

cardslib:地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android控件CardView实现卡片布局

    CardView介绍 CardView是Android 5.0系统引入的控件,相当于FragmentLayout布局控件然后添加圆角及阴影的效果:CardView被包装为一种布局,并且经常在ListView和RecyclerView的Item布局中,作为一种容器使用.CardView应该被使用在显示层次性的内容时:在显示列表或网格时更应该被选择,因为这些边缘可以使得用户更容易去区分这些内容. 使用 先看效果 首先在build.gradle文件添加依赖库 dependencies { compil

  • Android编程重写ViewGroup实现卡片布局的方法

    本文实例讲述了Android编程重写ViewGroup实现卡片布局的方法.分享给大家供大家参考,具体如下: 实现效果如图: 实现思路 1. 重写onMeasure(int widthMeasureSpec, int heightMeasureSpec)设置每个子View的大小 2. 重写onLayout(boolean changed, int l, int t, int r, int b) 设置每个子View的位置 第一步:新建FlowLayout继承ViewGroup package com

  • Android实现简单卡片布局

    GoogleNow是Android4.1全新推出的一款应用他,它可以全面了解你的使用习惯,并为你提供现在或者未来可能用到的各种信息,GoogleNow提供的信息关联度较高,几乎是瞬间返回答案,总而言之,GoogleNow是Google提出的全新搜索概念.当然,GoogleNow最为引人注目的当属它的卡片式设计.Google自家应用纷纷采用卡片布局(Google Now,Google Plus,Google Play). 在最新的QQ空间.新浪微博.豌豆荚中也可以见到卡片式设计的影子 下面介绍一种

  • Android最简单的状态切换布局实现教程

    前言 项目中经常遇到这样一种情况,新打开的界面需要加载数据,存在多种状态的结果,需要根据不同结果展示界面,这个过程归纳起来可以分为五种状态:初始状态.请求状态.空数据状态.网络错误状态.成功请求状态. 如果多个界面都存在这个流程,那么封装整个过程的调用就很有必要了,既可以简化调用过程,又可以很方便的管理整个流程. 下面话不多说了,来一起看看详细的介绍吧 功能简介 正在加载数据 数据加载失败 数据加载为空 网络加载失败 重试点击事件 支持自定义布局 效果图展示 最简单的使用方式 1.Add it

  • Android实现简单的自定义ViewGroup流式布局

    目录 前言 一.基本的测量与布局 二.流式的布局的layout 三.流式的布局的Measure 后记 前言 前面几篇我们简单的复习了一下自定义 View 的测量与绘制,并且回顾了常见的一些事件的处理方式. 那么如果我们想自定义 ViewGroup 的话,它和自定义View又有什么区别呢?其实我们把 ViewGroup 当做 View 来用的话也不是不可以.但是既然我们用到了容器 ViewGroup 当时是想用它的一些特殊的特性了. 比如 ViewGroup 的测量,ViewGroup的布局,Vi

  • Android编程简单实现九宫格示例

    本文实例讲述了Android编程简单实现九宫格.分享给大家供大家参考,具体如下: 实现的步骤 1. 一个整体的容器部分.就是上图中包括整个图片项个各个部分,这里我们使用gridView(表格布局)来实现 2.整个界面里需要注意的是 "重复的部分",就是 各个图片项和,图片下方显示的文字了.那么我们需要描述这个部分.在描述时,要说明图片位于上方,文字位于下方. 3.迭代,或者说重复的将各项 插入(放入)到容器内. 需要添加/修改3个文件:main.xml.meunitem.xml.act

  • Android AnalogClock简单使用方法实例

    本文实例讲述了Android AnalogClock简单使用方法.分享给大家供大家参考,具体如下: AnalogClock组件的使用很简单,先来看看效果图: AnalogClock组件的使用只需要在布局中指定的显示位置写入此组件即可使用,不需要在java代码中进行实例化. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.a

  • Android编程之绝对布局AbsoluteLayout和相对布局RelativeLayout实例详解

    本文实例分析了Android编程之绝对布局AbsoluteLayout和相对布局RelativeLayout.分享给大家供大家参考,具体如下:  一.绝对布局AbsoluteLayout 绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差. 下面我们举一个例子看看:例子里的机器人图片大小是250X250,可以看到我们使用android:layout_x和android:l

  • Android中ListView Item布局优化技巧

    本文实例讲述了Android中ListView Item布局优化技巧.分享给大家供大家参考,具体如下: 之前一直都不知道ListView有多种布局的优化方法,只能通过隐藏来实现,自己也知道效率肯定是很低的,但是也不知道有什么方法,这些天又查了一些资料,然后知道 其实google早就帮我们想好了优化方案了. 假设你的ListView Item有三种布局样式的可能:就比如很简单的显示一行字,要靠左,居中,靠右. 这时我们就可以在BaseAdapter里面重写两个方法: private static

  • Android AbsoluteLayout和RelativeLayout布局详解

    Android 线性布局: AbsoluteLayout布局和RelativeLayout布局.  1.绝对布局 AbsoluteLayout 绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差. 下面我们举一个例子看看:例子里的机器人图片大小是250X250,可以看到我们使用android:layout_x和android:layout_y来指定子元素的纵横坐标. <?

  • Android动态添加设置布局与控件的方法

    本文实例讲述了Android动态添加设置布局与控件的方法.分享给大家供大家参考,具体如下: 有时候我们会在代码端,动态的设置,添加布局和控件.下面我们就看来看一下如何处理,直接上代码,代码里面的注解很清楚了. 布局文件:fragment_hot.xml 说明:这个部局,我用的是scrollView做为基础布局,主要是为了实现一个滚动.这里不多说,这个你可以使用任何布局都可以,这里的id我是提前定义的. 这里面的现在有的布局是我为了看到我在代码端,动态添加的代码,是否可以追加到现有布局的后面而加上

随机推荐