我们在平时开发中,有时候会碰到adb启动失败:

"* daemon not running. starting it now on port 5037 *
ADB server didn't ACK
* failed to start daemon *
error: cannot connect to daemon"

一般出现这种情况都是因为其他其他程序占用了5037端口(比如豌豆荚,刷机精灵等),
通过以下命令可以找出哪个进程占用了5037端口

netstat -ano | findstr "5037"

TCP    127.0.0.1:5037         127.0.0.1:60478        ESTABLISHED     6312
TCP 127.0.0.1:5037 127.0.0.1:60479 ESTABLISHED 6312
TCP 127.0.0.1:5037 127.0.0.1:60480 ESTABLISHED 6312
TCP 127.0.0.1:5037 127.0.0.1:60481 ESTABLISHED 6312
TCP 127.0.0.1:5037 127.0.0.1:60482 ESTABLISHED 6312

我这边找到的进程号是6312, 然后我们在任务管理器里找到这个进程

如果这个进程不是adb, 结束它,再重启adb就会成功了。

Android design支持库中的TabLayout一般都用来实现头部Tab的效果,
比如:
TabLayout

但是像微信这种底部Tab布局在我们实际项目中还是非常常见的设计,
现在我们也可以用TabLayout非常方便的实现。
底部Tab

阅读全文 »

在Android的输入框中加入清除按钮,是很常见的设计,本文介绍如何创建一个控件,在输入框中加入清除按钮。

我们来看看实现这个控件都需要做什么:

  1. 清除按钮在输入框中有内容时出现
  2. 清除按钮必须出现在输入框内
  3. 点击清除按钮,清除输入框中的所有内容
  4. 清除按钮的颜色必须与主题一致

实现第一点,我们可以通过加入TextWatcher来监听EditText的变化,在onFocusChangeListener方法中处理清除按钮是否可见。
实现第二点,我们需要使用compound drawable作为清除按钮,然后在 OnTouch listener中处理点击事件。

阅读全文 »

SwiftDate是Github上开源的,使用Swift语言编写的NSDate封装库,可以很方便的在Swift中处理日期,比如日期创建,比较,输出等。

特性

  • 支持数学运算符进行日期计算(比如myDate + 2.week + 1.hour)
  • 支持比较运算符(比如<,>,==,<=,>=)
  • 快速获取/修改日期各部分内容(比如获取或修改日期中的月份)
  • 提供通用格式化输出或自定义的格式化输出
  • 提供一系列.toString方法
  • 提供简便的方法获取yesterday,tomorrow等

依赖

  • iOS 8.0+ / Mac OS X 10.10+
  • Xcode 6.4
  • Swift 1.2

支持Swift2.0版本,地址在文末的Github段落中

阅读全文 »

Atom是Github开源的文本编辑器,这个编辑器完全是使用Web技术构建的(基于Node-Webkit)。
Atom编辑器

我以前是使用Mou和Sublime编辑Markdown博客的,但现在已经是Atom的忠实粉丝,
在公司和个人的电脑上都已安装Atom,将它作为主要的文本编辑器。

阅读全文 »

Android File Grouping Plugin 是个很实用的插件,它可以在不改变文件目录结构的情况下,将文件按名称进行分组。

功能描述

分组规则,按名称中的下划线”_”作为分隔符,将下划线前面的做作为一组

分组不会移动文件
分组也不会实际创建目录

阅读全文 »

Fresco是来自Facebook开源的Android图片加载库,跟以前的Image Loader相比,提供了很多有用的新特性。

关于 Fresco

Fresco 是一个强大的图片加载组件。
Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。
Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
Fresco 支持 Android2.3(API level 9) 及其以上系统。

阅读全文 »