
【Android UI开发】
sbsujjbcy
业精于勤,荒于嬉;行成于思,毁于随!
展开
-
Android底部Tab页基于ViewPager的实现
在众多主流App中,包括QQ,微信等,为了和ios的UI保持统一,很多App使用的都是底部导航,当然在Android中也并不反对这种设计。这篇文章使用ViewPager实现这种效果。原创 2015-07-09 20:19:25 · 2775 阅读 · 0 评论 -
android使用Font Awesome字体图标
Font Awesome的网址见http://fontawesome.dashgame.com/,Font Awesome提供可缩放的矢量图标,可以使用CSS所提供的所有特性对它们进行更改,包括:大小、颜色、阴影或者其它任何支持的效果。仅一个Font Awesome字库,就包含了与网页相关的所有形象图标。无论在任何尺寸下,可缩放的矢量图形都会为您呈现出完美的图标。Font Awesome的矢量图标,原创 2015-04-06 10:54:42 · 5386 阅读 · 0 评论 -
RecyclerView的bug——Inconsistency detected
bug重现的方法使用 RecyclerView 加SwipeRefreshLayout下拉刷新的时候,如果绑定的 List 对象在更新数据之前进行了 clear,而这时用户紧接着迅速上滑 RecyclerView,就会造成崩溃,而且异常不会报到我们的代码上,属于RecyclerView内部错误。可能的原因当 clear 了 list 之后,这时迅速上滑,而新数据还没到来,导致 RecyclerVie原创 2015-06-12 18:34:13 · 22280 阅读 · 6 评论 -
static引发的RecyclerView上下滚动数据显示异常的bug
之前使用RecyclerView从来没有出现过这种问题。问题大致是这样的,当滑动RecyclerView时,某项item内的数据不断发生改变。如图所示: 从图中可以看到,中间的一项内容随着滚动在不断的发送变换。找了好久没找到原因,后来去stackoverflow上找了下,找到了类似的问题,但是依然没有解决方法,后来无意翻看以前的代码,想起来写ViewHolder的时候把成员变量声明成stati原创 2015-05-16 09:23:16 · 4585 阅读 · 1 评论 -
Android体验高扩展艺术般的适配器
前言本篇文章带大家体验一下一种具有扩展性的适配器写法。这个适配器主要用于Item有多种的情况下,当然只有一种类型也是适用的实现毫无疑问我们要继承BaseAdapter,重写getCount,getItemId,getItem,getView等方法,我们需要持有数据集,所以应该声明一个List的成员变量,同时还需要持有上下文对象Context,此外这个适配器是通用的,所以应该是泛型的,所以初步的代码应原创 2015-06-23 13:28:48 · 3218 阅读 · 3 评论 -
V7兼容包——调色板Palette的使用
之前写过四篇文章是关于v7兼容包RecyclerView的使用 android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理 android v7兼容包RecyclerView的使用(三)——布局管理器的使用 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 今天无意看到一个v7兼容包原创 2015-04-04 11:29:04 · 3552 阅读 · 0 评论 -
安卓自定义控件——标题栏的复用
一贯作风,先看效果图,再实现编写自定义属性文件atts.xml,自定义属性中涉及到的属性有左右两边的button的背景图,中间标题的内容,字体大小,字体颜色。 编写布局文件layout_topbar.xml,使用相对布局,左边一个button,跟父控件左对齐后外边距原创 2015-01-18 16:44:21 · 3055 阅读 · 4 评论 -
2014最后一篇,记ExpandableListViewd的自定义
2014最后一篇,记ExpandableListViewd的自定义,整个流程下来可能二级项会出现不能点击的情况,这时候需要将二级项的布局文件里的所有Layout里增加属性,我这里只是增加了根layout,内部layout并没有增加,发现这样后也是可以点击的,于是内部layout就没有加这个属性了原创 2014-12-31 23:37:13 · 1311 阅读 · 0 评论 -
获得 LayoutInflater 实例的三种方式
在实际开发中LayoutInflater这个类还是非常有用的,它的作用类似于findViewById()。不同点是LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化;而findViewById()是找xml布局文件下的具体widget控件(如Button、TextView等)。 具体作用:1、对于一个没有被载入或者想要动态载入的界面,都需要使用Layo转载 2014-09-16 16:52:48 · 1093 阅读 · 0 评论 -
Android使用Fragment打造万能页面切换框架
首先我们来回忆一下传统用Activity进行的页面切换,activity之间切换,首先需要新建intent对象,给该对象设置一些必须的参数,然后调用startActivity方法进行页面跳转。如果需要activity返回结果,则调用startActivityForResult方法,在onActivityResult方法中获得返回结果。此外,每一个要展示的activity需要在AndroidManif原创 2015-07-25 21:24:36 · 13844 阅读 · 7 评论 -
RecyclerView通用适配器的实现
分析我们需要在RecyclerView内部维持一个数据集合的引用需要实现Item的点击事件,包括短按和长按,并需要向外部提供设置监听器的方法这个适配器必须通用,所以应该是泛型的,并且ViewHolder也是通用的,可以采用SparseArray维持View的所有集合在RecyclerView内部需要实现数据的绑定(抽象方法,延迟到子类实现),监听器的绑定编写监听器分为短按事件和长按事件短原创 2015-06-13 10:12:35 · 3797 阅读 · 1 评论 -
android 自定义View过程解析
PS:本篇文章大多数翻译自github上一篇英文文章!总所周知,安卓UI是基于View(屏幕上的单一节点)和ViewGroup(屏幕上节点的集合),在android中有很多widgets和layouts可以用于创建UI界面,比如最常见的View有Button,TextView等等,而最常见的布局也有RelativeLayout,LinearLayout等。在一些应用中我们不得不自定义View去满足我原创 2015-03-09 16:51:15 · 1930 阅读 · 1 评论 -
android UI之ListView的自定义
首先还是上效果图,该ListView由四个控件组成,左边是一个图标,中间是两个TextView用于显示标题和描述,右边是一个TextView用于显示时间。编写每一项对应的实体类package cn.edu.zafu.myapplication;/** * Created by Administrator on 2015/1/1. */public class Item {原创 2015-01-01 13:46:15 · 1401 阅读 · 0 评论 -
Android 4.4 Dialog 被状态栏遮挡的解决方法
首先看不正常的图,点击tracing_dialog按钮弹出对话框 然后看理论上的效果图 观察两张图发现,不正常的图最上方被状态栏遮挡住了,而该问题存在于android4.4版本中。为了修复该问题,我们增加一个函数在Dialog的子类中,对于android4.4及以上版本进行修复,而android4.4以下版本不进行处理。我们先来看有问题的代码package cn.edu.zafu.demo;im原创 2015-05-22 20:30:37 · 11005 阅读 · 2 评论 -
Android 实现变色状态栏
首先我们得了解什么是透明状态栏以及什么是沉浸式状态栏,以及其区别,国内习惯称透明状态栏为沉浸式状态栏,但是两者是有本质区别的。先来看看什么是沉浸式模式。 Android 4.4中,沉浸式体验得到了再次强化,提供了一种“全屏模式”(Full-screen Immersive Mode)。全屏模式又分两种,一种叫后撤式 (Lean Back),另一种叫做沉浸式(Immersive)。原创 2015-09-11 11:36:41 · 20454 阅读 · 13 评论 -
Android 实现沉浸式状态栏
上一篇文章将Android 实现变色状态栏我们实现了变色的状态栏,也介绍了沉浸式状态栏和透明状态栏的区别,这篇文章我们实现沉浸式状态栏。 沉浸式状态栏的来源就是很多手机用的是实体按键,没有虚拟键,于是开了沉浸模式就只有状态栏消失了。于是沉浸模式成了沉浸式状态栏。我们先来看下具体的效果开启沉浸模式后,状态栏消失,从顶部向下滑动,状态栏出现,退出沉浸模式,状态栏也出现了。我们的代码基于前一篇文章。原创 2015-09-12 10:09:56 · 13929 阅读 · 9 评论 -
Android SVG动画PathView源码解析与使用教程(API 14)
使用的是一个第三方库android-pathview主要是一个自定义View——PathView,跟所有自定义View一样,重写了三个构造方法。并且最终调用三个参数的构造方法,在里面获取自定义属性。原创 2015-08-11 11:27:57 · 6421 阅读 · 0 评论 -
慕课网app下拉刷新图标填充效果的实现
之前看到一种下拉刷新的效果,与以往的下拉效果都不一样,大多数下拉刷新都是一个圆形进度条在旋转,而这个下拉刷新则是一个不断填充的效果。本以为这是个自定义View,后来反编译慕课网的app后提取资源的时候看到好多的图片,那大概慕课网app内部的实现应该是帧动画达到这种效果。而当我看到这种效果的时候,由于前段时间在学自定义控件,所以本能的反应则是自定义的。首先我们看下慕课网的效果。如下图原创 2015-03-05 15:26:54 · 6085 阅读 · 12 评论 -
Android实战页面内容加载动画
前言文章开头来看一下本篇文章要实现的效果,如图左边是慕课网APP中的效果,右边是58同城APP中的加载动画。实现第一种动画之前用图形的混合模式和贝塞尔曲线实现过慕课网的下拉刷新的加载动画。见链接慕课网app下拉刷新图标填充效果的实现,而这种动画效果在app中其实也很常见,之前的那篇文章是自定义View绘制出来的,其实这个也可以用DrawableAnimation实现,这里,我们来实现一下,看看有多简原创 2015-06-18 19:57:27 · 5939 阅读 · 2 评论 -
Android 屏幕适配最佳实践
参考该文章理论知识加代码 Android 屏幕适配方案但是呢,该篇博文里个人觉得代码封装的不是很好,于是自己封装了下,使用XStream生成xml。上面那篇文章里没有对横竖屏进行适配,代码里完善了这一点。 在开始码代码前,贴一张图,结合前面那篇文章的理论知识一起看。 然后呢看最终适配的效果,这里以320*480为基准,屏幕上放一个TextView,宽度为x160,高度为y240,效果图原创 2015-05-05 09:39:39 · 3288 阅读 · 0 评论 -
Android ViewPager内容部分随手势上下滑动隐藏与显示Indicator效果的实现
效果ViewPager中的内容,比如ListView手势上下滑动,当内容向下滑动时,即手势上划,隐藏indictor,当内容向上滑动时,即手势下滑,显示indicator,效果如图所示 编码借用两个库来快速完成 1. ViewPagerIndicator 2. ObservableScrollView将两个库引入项目中去,快速的搭建一个ViewPager框架后,在ViewPager每页对应原创 2015-05-13 08:54:25 · 8303 阅读 · 11 评论 -
Android自定义对话框实现QQ退出界面
效果首先看下qq的效果图,点击菜单按钮后点退出就会出现如图的对话框.从上图可以看出,该对话框有一个圆角,以及标题,提示信息,两个按钮,按钮颜色是白色,按钮点击后背景会变成灰色,正常状态下对话框的背景色是白色.并且除了点击取消按钮和返回键外,点击屏幕其他区域该对话框不会小时.那么现在我们来实现一下这个对话框.我们实现后的效果如下图所示实现首先编写我们的背景,背景默认情况下是白色的,并且有一个圆角,使用原创 2015-06-26 18:03:43 · 5673 阅读 · 4 评论 -
android 项目实战——打造超级课程表一键提取课表功能
如果你是在校大学生,或许你用多了各种课程表,比如课程格子,超级课程表。它们都有一个共同点就是可以一键导入教务处的课程。那么一直都是用户的我们,没有考虑过之间是如何实现的。那么现在就由我来带领大家从程序猿的角度模仿一款”超级课程表“。PS:由于超级课程表是商用软件,原本提取了一些图片,但是为了避免涉及侵权问题,所有图片均已使用一张绿色圆圈代替,背景图片也以颜色代替,缺乏美观,如果你觉得太丑,可以原创 2015-03-01 19:18:52 · 27485 阅读 · 73 评论 -
android v7兼容包RecyclerView的使用(一)
什么是RecyclerView?个人理解,它是一个在数据量大的时候,为了显示在界面上提供的灵活高效处理的控件。可以替代listview,gallery,gridview等控件。如何使用?本篇文章只是热热身,不会过多介绍细节。首先需要导入\sdk\extras\android\support\v7\recyclerview\libs\android-support-v7-recyclerview.ja原创 2015-03-10 22:41:38 · 10845 阅读 · 0 评论 -
对烦人的findViewById说再见吧!
下面的这个函数参考自一条微博public T $(int id) { return (T) findViewById(id);}说明这是一个泛型方法,并且这个泛型是View的子类,返回值是泛型T,函数名借鉴JQuery,使用美元符$实例调用代码TextView tv=$(R.id.tv);为了避免在每个Activity中重复写这个函数,可以写一个自己的MyActivity原创 2015-01-08 18:13:23 · 2886 阅读 · 5 评论 -
实战EmptyView,为ListView的加载缓冲
前言在我们的大多数应用中,会用到ListView,而ListView的数据,有时候是来自网络或者耗时操作之后得到的,这时候,有必要在数据显示之前提供一个友好的提示,结合上一篇文章的Android实战页面内容加载动画成果,再结合ListView自身的属性,我们来实现一下这种效果。首先见效果图 ListView的实现ListView自身带有一个setEmptyView(View view);方法,用于原创 2015-06-20 17:01:57 · 4409 阅读 · 0 评论 -
Android实现用户引导界面
首先看效果图,盗了超级课程表几张图 在众多应用中,几乎每一款应用都有自己的Splash用户引导界面,该界面在用户首次启动展示,之后不会显示,主要向用户展示新功能.分析主要使用ViewPager+Indicator实现主要是实现一个圆形指示器,这个圆形指示器继承LinearLayout,需要有一些属性可以自定义,比如指示器的颜色,大小,边距等这个指示器也可以自动滚动,比如应用在幻灯片展示的原创 2015-06-17 10:47:28 · 4806 阅读 · 5 评论 -
使用通用适配器Base-adapter-helper
适配器写多了会有一种写到吐的感觉,今天来体验一下不用写适配器等待感觉,一般来说,我们写适配器都是重写getView方法,然后使用ViewHolder设计模式,在getView里进行数据绑定,写一次还好,写多了会感觉在不断做重复工作,那么有没有这么一个通用的适配器供我们使用,而不用写那么多次重复代码呢,答案是有的,见https://github.com/JoanZapata/base-adapter-原创 2015-04-05 12:40:46 · 2208 阅读 · 2 评论 -
android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
前三篇文章 android v7兼容包RecyclerView的使用(三)——布局管理器的使用 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的使用以及常见的相关类和布局管理器的灵活之处。写了这么多篇,还没涉及到用户交互,那么怎么处理点击事件呢。在RecyclerView中你会惊奇原创 2015-03-12 16:45:23 · 6656 阅读 · 4 评论 -
android v7兼容包RecyclerView的使用(三)——布局管理器的使用
前两篇文章 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的基本用法以及与它相关的重要的几个类,本篇文章介绍布局管理器的具体用法。为了演示布局管理器的使用,找了很多个例子,都没有找到感觉合适的例子,后来google了一把,发现了一个比较适合说明问题的例子。所以就拿该例子来解释吧。在演原创 2015-03-12 13:19:37 · 8884 阅读 · 3 评论 -
android v7兼容包RecyclerView的使用(二)
A flexible view for providing a limited window into a large data set大致意思就是:当有大量的数据显示在一个有限大小的窗口上时,RecyclerView就是解决这种情况的一个灵活的View。原创 2015-03-11 20:30:48 · 5349 阅读 · 0 评论 -
Toolbar+DrawerLayout高仿网易新闻客户端
首先看效果图,网易新闻客户端的特点是双向侧滑,并且左上角的图标会随着菜单的侧滑会有动画效果。 我们采用Toolbar和DrawerLayout实现双向侧滑以及actionbar在菜单文件里先定义菜单<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.androi原创 2015-04-19 16:11:29 · 5139 阅读 · 4 评论 -
Android Support库百分比布局
之前写过一篇屏幕适配的文章Android 屏幕适配最佳实践,里面提到了类似百分比布局的东西,但是该方法缺点很明显,就会增加很多无用的数据,导致apk包变大。而谷歌的support库中,增加了一个叫做percent库,该库在如图目录下,如果没有,请使用sdk manager更新至最新在使用前,我们先看下这个库有哪些类很显里面有一个FrameLayout布局的子类和RelativeLayout布局的子类原创 2015-06-30 12:10:45 · 8549 阅读 · 15 评论 -
Android RecyclerView瀑布流布局添加Footer实现上拉加载
这篇文章应该是晚到了好几个月,之前想写,但是中途遇到了一些棘手的问题,无奈没有去写。写这篇文章的最初来源是一个朋友问我在Android中如何实现瀑布流布局?,当时我的回答是使用RecyclerView,后来他又问我那怎么实现上拉加载并添加Footer呢?我想都没想就回答他根据type的不同去添加一个Footer,监听滚动事件,当滑动到最后显示footer并回调对应的接口,那么,这个过程就会遇到一个F原创 2015-11-30 15:10:20 · 10185 阅读 · 5 评论