作者:泥沙砖瓦浆木匠
网站:http://blog.csdn.net/jeffli1993
个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。
交流QQ群:【编程之美 365234583】http://jq.qq.com/?_wv=1027&k=XVfBTo

要捐钱的就打支付宝吧:13958686678(泥瓦匠开个玩笑~)

一、前言

继续AndroidUI系列,泥瓦匠又要开始扯淡了。哈哈今天在文章头加了个支付宝账号。我也真逗,至今没收到一笔是写博客的钱。或是分享的。泥瓦匠也就挂着逗逗乐而已。笑着就笑吧,我也在笑了。

和我的师傅扯着蛋。也教授了泥瓦匠很多东西。泥瓦匠一直在学习,一直在进步而已。这是师傅送我的话:

睡少点,玩少点,分清主次拍优先级。还要发挥同伴的能力,不是什么事情都要自己做的。

二、正文

今天要讲的内容很多。还是主要大家去看代码吧。我把主要的东西,介绍下。然后给源码自己参透吧。下面给大家带来的是这一讲,云通讯录之联系人列表,带侧滑选择,带搜索框。

泥瓦匠的思路

  • 一个barTop层:两个ImgView或是Button,一个TextView,用styles.xml控制其的样式。
  • 核心中间listView 和 侧滑View 搜索框View 自定义实现。这将是本讲的重点
  • 底部TextView的实现

三、实现核心代码

泥瓦匠刚刚吃完午饭,来扯会淡。路上遇到一对黑人唱着歌,朝着食堂吃饭去了。生活就需要这样子,其乐融融。

下面泥瓦匠先实现旁边的侧滑(SideBar),其实也就是和上一篇的Android UI(四)云通讯录项目之云端更新进度条实现中的自定义View一样的。只要知道一些Canvas、Paint的一些基础就好了。我们很简单的定义了一个26个字母的String数组,然后循环将他们Paint出来就好了。其实就是这么简单。

package org.nsg.views;import com.example.android05.R;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;public class SideBar extends View
{// touching eventprivate OnTouchingLetterChangedListener onTouchingLetterChangedListener;// 26 letterspublic static String[] b = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W", "X", "Y", "Z", "#" };// if choosedprivate int choose  = -1;private Paint paint = new Paint();private TextView mTextDialog;public void setmTextDialog(TextView mTextDialog){this.mTextDialog = mTextDialog;}public SideBar(Context context, AttributeSet attrs, int defStyleAttr){super(context, attrs, defStyleAttr);}public SideBar(Context context, AttributeSet attrs){super(context, attrs);}public SideBar(Context context){super(context);}// override onDraw functionprotected void onDraw(Canvas canvas){super.onDraw(canvas);// get the heightint height = getHeight();// get the widthint width = getWidth();// get one letter heightint singleHeight = height / b.length;for (int i = 0; i < b.length; i++){paint.setColor(Color.rgb(33, 65, 98));paint.setTypeface(Typeface.DEFAULT_BOLD);paint.setAntiAlias(true);paint.setTextSize(20);// if choosed if(i == choose){paint.setColor(Color.parseColor("#3399ff"));paint.setFakeBoldText(true);}// draw textfloat x = width / 2 - paint.measureText(b[i]) / 2;float y = singleHeight * i + singleHeight;canvas.drawText(b[i], x, y, paint);paint.reset();}}@SuppressWarnings("deprecation")@Overridepublic boolean dispatchTouchEvent(MotionEvent event){final int action = event.getAction();final float y = event.getY(); // get the Y final int oldChoose = choose;final OnTouchingLetterChangedListener changedListener = onTouchingLetterChangedListener;final int letterPos = (int)( y / getHeight() * b.length);switch (action){case MotionEvent.ACTION_UP:setBackgroundDrawable(new ColorDrawable(0x00000000));choose = -1;invalidate();if (mTextDialog != null)mTextDialog.setVisibility(View.INVISIBLE);break;default:setBackgroundResource(R.drawable.bg_sidebar);if (oldChoose != letterPos){if (letterPos >= 0 && letterPos < b.length){if (changedListener != null)changedListener.onTouchingLetterChanged(b[letterPos]);if (mTextDialog != null){mTextDialog.setText(b[letterPos]);mTextDialog.setVisibility(View.VISIBLE);}choose = letterPos;invalidate();}}break;}return true;}public void setOnTouchingLetterChangedListener(OnTouchingLetterChangedListener changedListener){this.onTouchingLetterChangedListener = changedListener;}public interface OnTouchingLetterChangedListener{public void onTouchingLetterChanged(String str);}
}

既然做好了这个,我们就实现这个listView,其实ListView是最好实现的。先定义一个ListView,然后再创一个相应的item的xml。用代码将它们循环一下就好。

下面是item的xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="match_parent"android:gravity="center_vertical"android:orientation="vertical" ><TextViewandroid:id="@+id/txt_catalog"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="1"android:paddingBottom="5dp"android:paddingTop="5dp"android:paddingLeft="12dp"android:text="A"android:textColor="@color/bluejeff"android:drawableBottom="@drawable/line_blue" /><RelativeLayout android:layout_width="wrap_content"android:layout_height="wrap_content"><ImageViewandroid:id="@+id/user_head"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="6dp"android:layout_marginBottom="6dp"android:background="@drawable/bg_border"android:src="@drawable/user_head" /><LinearLayout android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_toRightOf="@id/user_head"android:background="@color/white"android:orientation="vertical"><TextViewandroid:id="@+id/txt_user_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/black"android:layout_marginTop="12dp"android:layout_marginLeft="10dp"android:layout_marginBottom="6dp"android:textSize="20sp"android:text="Jeff Lee"/><TextViewandroid:id="@+id/txt_user_list_info"android:layout_width="wrap_content"android:layout_height="30dp"android:textSize="12sp"android:layout_marginLeft="10dp"android:text="IT部门    信息科"android:textColor="@color/gray" /></LinearLayout><TextViewandroid:id="@+id/txt_user_id"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#336598"android:visibility="gone"android:text="1"/></RelativeLayout></LinearLayout>

然后我们实现那个搜索框,搜索框其实看上去就是个TextView。所以我们继承TextView的类,并实现焦点控制的监听器等,让这些更好的给我们用。难点也没有,就是那个画出搜索图标而已。代码我下面也给出来了:

最后,大功告成。小结下,其实这个界面还有增加了一个SidleBar。在我们Android UI(三)SlidingMenu实现滑动菜单(详细 官方)这里讲过的。因为user有个组,或是在其中一本电话本里面的。然后一个界面大家别觉得它太麻烦。一个一个来,有成就感。老话说一句呗:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节。

任何做事都一样,注意细节。一步一步来,Think big, Start small, Scale fast.道理都知道,就去做呗。

四、总结

本章关于云通讯录的界面我会慢慢分享给大家。项目也放在下面的链接供大家下载学习。这个比较难,大家好好看代码吧。关于代码在下面的链接:http://files.cnblogs.com/Alandre/Android05.rar

如以上文章或链接对你有帮助的话,别忘了在文章按钮或到页面右下角点击 “赞一个” 按钮哦。你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章

转载于:https://www.cnblogs.com/Alandre/p/4143327.html

Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框相关推荐

  1. Android UI(四)云通讯录项目之云端更新进度条实现

    作者:泥沙砖瓦浆木匠 网站:http://blog.csdn.net/jeffli1993 个人签名:打算起手不凡写出鸿篇巨作的人,往往坚持不了完成第一章节. 交流QQ群:[编程之美 36523458 ...

  2. iOS开发UI篇 -- UISearchBar 属性、方法详解及应用(自定义搜索框样式)

    很多APP都会涉及到搜索框,苹果也为我们提供了默认的搜索框UISearchBar.但实际项目中我们通常需要更改系统默认搜索框的样式.为了实现这一目标,我们需要先搞懂 UISearchBar 的属性及方 ...

  3. 安卓通讯录系统mysql_Android手机通讯录项目开发--联系人数据库contacts2.db介绍

    项目描述:该项目为基于Android平台的手机通讯录,主要模块分为四个部分:联系人管理模块,通话记录管理模块,短信管理模块,系统设置模块. 系统结构图如下: 本项目启动时间:2014年5月28日 说明 ...

  4. 码云上传代码添加标签_[Android] 发布码云(Gitee)项目到JitPack(最全完整流程)

    最近把github上的代码都转移到了码云上,而且github上的仓库可以很方便的迁移到码云,所以老代码的迁移问题不用考虑. 之前使用 JCenter 发布了一个 GitHub 开源项目,JCenter ...

  5. Javascript第五章获取DOM对象的属性,加游览器搜索框内容点击跳转源码第七课

    注意:其中 function $(id){return document.getElementById(id);} 表示:这个就是个方法, 方法名字叫$ 参数为id. 这个是元素id. 传入这个id, ...

  6. Android开源实战:简单好用、含历史搜索记录的智能搜索框

    前言 Android开发中,类似下图的搜索功能非常常见 今天,我将带来一款 封装了 历史搜索记录功能 & 样式 的Android 自定义搜索框 开源库,希望你们会喜欢. 已在Github开源: ...

  7. SharePoint 2010 创建联系人列表和使用联系人列表

    SharePoint 2010 创建联系人列表和使用联系人列表 作为一款协同办公系统,联系人列表是必不可少的,SharePoint 2010里提供了"联系人列表模板",我们可以基于 ...

  8. Android Studio实现通讯录项目

    项目目录 一.项目概述 二.开发环境 三.详细设计 1.主界面的搭建 2.SQLite数据库 2.1.SQLite是什么? 2.2.为什么要用SQLite? 2.3.SQLite有什么特点? 3.SQ ...

  9. Android通讯录管理 获取联系人 通话记录 短信消息 一

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Andr ...

最新文章

  1. 36晋级12第四场:评委弃权 无人晋级
  2. 通用!Python保存一个对象的方式
  3. 计算机视觉:目标检测的发展历程与基础概念
  4. 【学习笔记】JavaScript基础(一)
  5. 程序员如何搞定前端高频面试难题?附答案汇总 | 技术头条
  6. mysql 5.7连接java_MACOS mysql 5.7 Navicat 可以连接 , Java 报错
  7. Android 之简易涂鸦板
  8. 轨道运营管理专业自荐书_城市轨道交通运营管理专业职业规划(1)
  9. 阿里云天池AI龙珠计划-Python训练营学习笔记task1
  10. 媒体播控系统、信息发布系统 使用说明
  11. .NET Core、Xamarin、.NET Standard和.NET Framework四者之间的区别
  12. 计算机作用对象失败怎么办,虚拟电脑控制台严重错误—获取VirtualBox COM 对象失败的解决办法...
  13. debian 9 配置ati驱动
  14. oracle定时清理aud$
  15. 阿里云学生机购买流程及续费操作(图文)
  16. PHP源生数据分页显示
  17. 1.5数学基础-概率计算
  18. 一图缕清 mysql 事务锁
  19. Imail邮件服务器的使用
  20. 前端三剑客——CSS

热门文章

  1. 法媒评马云996:亚洲独有的洗脑我们不懂
  2. 一篇文章讲清楚人工智能、机器学习和深度学习的区别和联系
  3. 平板电脑怎么投屏到电视上_电脑屏幕投屏到平板、IPAD、艾派德
  4. 大数据中心周边辐射大吗_PETCT有辐射,PETCT对陪同人员的影响大吗?
  5. 总线制和多线制示意图_消防系统的总线制和二线制什么区别?消防设备供电方式如何选择?...
  6. 生成pojo mysql_通过数据库表反向生成pojo类
  7. python 爬带端口的网站_程序员带你爬取爬虫最爱扒的网站数据。快来看!
  8. python解压文件_使用Python实现文件压缩和解压
  9. 外网访问 KVM 虚拟机
  10. Drawable 详解