<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Chrissen's Blog]]></title><description><![CDATA[反正就是搞Android的]]></description><link>https://blog.youkuaiyun.com/ChrisSen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ChrisSen]]></copyright><item><title><![CDATA[从0 到1开发一款App（三）：设计]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/100060434</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/100060434</guid><author>ChrisSen</author><pubDate>Mon, 02 Sep 2019 09:46:38 +0800</pubDate><description><![CDATA[我们先回顾一下上篇文章，上篇文章中我们主要讲了和产品相关的内容，包括优秀的产品、它们所具备的优秀特质以及《麻雀笔记》的产品思想等，还没看过的朋友可以点击下方链接进行阅读：
https://blog.youkuaiyun.com/ChrisSen/article/details/95194869
今天这篇文章主要讲一下跟设计相关的内容，共分为三个部分：

设计风格
资源分享
夜间模式

设计风格
软件的整体设计...]]></description><category></category></item><item><title><![CDATA[从0 到1开发一款App（二）：产品]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/95194869</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/95194869</guid><author>ChrisSen</author><pubDate>Wed, 17 Jul 2019 12:01:37 +0800</pubDate><description><![CDATA[我们先回顾一下上篇文章，上篇文章中我们主要讲了四个部分的内容，分别是自我介绍、产品、开发《麻雀笔记》的初衷以及开发一款App的难易等问题。还没看过文章的朋友可以点击链接阅读：
https://blog.youkuaiyun.com/ChrisSen/article/details/92801094
这篇文章主要讲一下跟产品相关的东西，由于本人并非产品经理，也未从事过与产品相关的工作，仅仅是因为平时自己喜爱产品...]]></description><category></category></item><item><title><![CDATA[一款与众不同的壁纸应用——《MW地图壁纸》]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/93765048</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/93765048</guid><author>ChrisSen</author><pubDate>Sun, 07 Jul 2019 11:55:09 +0800</pubDate><description><![CDATA[每天花些时间选择一张适合的图片设为桌面壁纸是我一天当中必做的事情。对于壁纸的选择，首先要符合我的审美，我是一个简单的人，所以在选择壁纸时我更多的会青睐简洁、有质感的壁纸。其次，要与众不同，彰显我的个性，最好还能装装B。当我试遍了许许多多的壁纸应用（包括静态壁纸与动态壁纸）后，发现能一直让我保持新鲜感同时又能满足我的需求的应用几乎没有，于是我产生了开发一款属于自己的壁纸应用，而现在它将属于你我每一个...]]></description><category></category></item><item><title><![CDATA[从0到1开发一款App（一）：前言]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/92801094</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/92801094</guid><author>ChrisSen</author><pubDate>Thu, 20 Jun 2019 23:55:54 +0800</pubDate><description><![CDATA[大家好，我是《麻雀笔记》App的开发者，随着新版本的上架，我也萌生了写一系列关于如何开发一款App的文章，这个系列打算就叫《从0到1开发一款App》了，是不是感觉很土low，没有关系，只要内容不low就行。
这个系列目前的规划大概会有八篇文章左右，分别会介绍与产品、设计、开发、测试以及运营等等相关的内容。

我打算用两个月左右的时间把这个系列写完，这个系列可以算得上是对我前期所有工作的一个总结与概...]]></description><category></category></item><item><title><![CDATA[Android软键盘的全面解析，让你不再怕控件被遮盖]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/92804043</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/92804043</guid><author>ChrisSen</author><pubDate>Wed, 19 Jun 2019 23:26:57 +0800</pubDate><description><![CDATA[本文转载自：https://blog.youkuaiyun.com/l540675759/article/details/74528641
背景
1.Android软键盘这块从我入职到现在，是一个一直纠缠我的问题。
2.从布局挤压，到EditText显示不全，在到弹出时卡顿，在Android软键盘面前我无数次跌倒。
3.因为网上大多数的知识点比较分散而且很杂，所以本篇做一个整合篇。
4.Android软键盘这...]]></description><category></category></item><item><title><![CDATA[弹出Dialog的时候如何调出输入法？]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/90668637</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/90668637</guid><author>ChrisSen</author><pubDate>Wed, 29 May 2019 12:03:35 +0800</pubDate><description><![CDATA[如果Dialog里面有一个输入框，弹出的时候需要弹起输入法，该怎么操作呢？
设置属性：
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
        dialog.getWindow()....]]></description><category></category></item><item><title><![CDATA[改变虚拟导航栏(navigation bar)背景色及图标颜色]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/90241178</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/90241178</guid><author>ChrisSen</author><pubDate>Thu, 16 May 2019 09:12:07 +0800</pubDate><description><![CDATA[众所周知，安卓系统中存在着虚拟的导航栏，它们不是实体按键，而是通过软件实现的。一般而言，虚拟导航栏是长成下面这样的：

系统中默认虚拟导航栏的背景是黑色的，按键的颜色是白色。但是如果软件需要自定义主题色，很多时候，我们都希望它的背景色能跟主题色保持一样。那我们怎么实现呢？
&lt;item name="android:navigationBarColor"&gt;@color/colorPrima...]]></description><category></category></item><item><title><![CDATA[如何关闭跨进程的前台服务？]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/90177864</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/90177864</guid><author>ChrisSen</author><pubDate>Mon, 13 May 2019 22:54:28 +0800</pubDate><description><![CDATA[工作中遇到了这样一个问题：App支持记步功能，在开发的时候我把它放到了单独的进程中，为了能够实现App在后台也能记步的功能，在进程中开启了一个前台服务。之前由于产品的功能模块比较少，所以不支持它的关闭与开启，但是随着软件的迭代更新，功能模块越来越多，于是产品需要实现这样的需求：当用户把步数的功能拿掉后，对应的记步通知也要消失；把步数功能添加进导航栏，记步的通知也要随之出现在通知栏。

上图是添加了...]]></description><category></category></item><item><title><![CDATA[DSL构建：领域特定语言]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/90041388</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/90041388</guid><author>ChrisSen</author><pubDate>Fri, 10 May 2019 19:20:49 +0800</pubDate><description><![CDATA[什么叫API整洁？

能够让读者清楚的知道在代码中发生了什么（选择良好的名称和概念）
代码需要看起来整洁，极少使用浮夸的代码且不存在冗余的语法




领域特定语言的概念

通用编程语言（解决几乎所有能被计算机解决的问题）；领域特定语言（专注在特定任务，或者说领域上，并放弃与该领域无关的功能）
最常用的DSL语言：SQL &amp; 正则表达式
DSL趋向于声明式（描述了想要的结果并将执行的细...]]></description><category></category></item><item><title><![CDATA[Android指纹识别API讲解，一种更快更好的用户体验]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/89917003</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/89917003</guid><author>ChrisSen</author><pubDate>Thu, 09 May 2019 16:41:46 +0800</pubDate><description><![CDATA[本文转载自：https://blog.youkuaiyun.com/guolin_blog/article/details/81450114

我发现了一个比较怪的现象。在iPhone上使用十分普遍的指纹认证功能，在Android手机上却鲜有APP使用，我简单观察了一下，发现Android手机上基本上只有支付宝、微信和极少APP支持指纹认证功能，就连银行和金融类的应用都基本不支持，甚至很多开发者都不知道And...]]></description><category></category></item><item><title><![CDATA[Kotlin中最常用的80个关键字]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/89874921</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/89874921</guid><author>ChrisSen</author><pubDate>Mon, 06 May 2019 20:32:45 +0800</pubDate><description><![CDATA[fun 函数声明
val / var 变量声明
${}  字符串模板
import 导入任何种类的声明
enum class 枚举
when 分支表达式
… 区间表达式（递增，闭区间）
until （递增，开区间）
for( a in…) 循环
down To 递减
step设置步长
in !in 判断对象是否在集合或区间中
const val 类似于Java中static final ，适用于...]]></description><category></category></item><item><title><![CDATA[第十章：注解与反射]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/89486553</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/89486553</guid><author>ChrisSen</author><pubDate>Sun, 28 Apr 2019 22:33:46 +0800</pubDate><description><![CDATA[注解


应用注解： 关键字@
常用：@Deprecated 被废弃， 可以使用replaceWith参数增强它。该注解可以传入参数message, replaceWith, level。参数类型：基本数据类型、字符串、枚举、类引用、其他的注解类以及前面这些类型的数组；
注意：把一个类指定为注解实参，在类名后加上::class ; 把另外一个注解指定为一个实参，去掉注解名称前面的@; 要把一个数组...]]></description><category></category></item><item><title><![CDATA[第九章：泛型]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/89486345</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/89486345</guid><author>ChrisSen</author><pubDate>Thu, 25 Apr 2019 19:18:14 +0800</pubDate><description><![CDATA[泛型类型参数

类型参数约束：限制作为（泛型）类和（泛型）函数的类型实参的类型

如果把一个类型指定为泛型类型形参的上界约束，在泛型具体的初始化中，其对应的类型实参就必须是这个具体类型或者是它的子类型。
指定多个约束：使用关键字where

没有指定上界的类型形参将会使用Any?这个默认的上界 ， 如果想让类型参数始终是非空类型，需要使用Any或其子类型。

运行时的泛型

JVM 上的泛型一般是...]]></description><category></category></item><item><title><![CDATA[竟然还有数据运营？]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/89189507</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/89189507</guid><author>ChrisSen</author><pubDate>Wed, 10 Apr 2019 21:47:28 +0800</pubDate><description><![CDATA[前言
昨天收到友盟的一份邮件，里面是介绍一场关于数据分析大赛的报名活动。活动的详情请点击这里：https://info.umeng.com/detail?id=116&amp;&amp;cateId=1?utm_source=pcedm

恰巧的是最近我女朋友正要找运营相关的工作，于是顺便就了解了一些关于运营的工作，发现运营岗位分的很细，具有所知道有内容运营、新媒体运营、社区运营等。于是就抱着好奇...]]></description><category></category></item><item><title><![CDATA[第八章：高阶函数：Lambda作为形参和返回值]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/88987923</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/88987923</guid><author>ChrisSen</author><pubDate>Wed, 03 Apr 2019 18:54:25 +0800</pubDate><description><![CDATA[声明高阶函数


高阶函数定义：是以另外一个函数作为参数或者返回值的函数；在Kotlin中可以用lambda或者函数引用来表示函数；


任何以lambda或者函数引用作为参数的函数，或者返回值为lambda或者函数引用的函数或者两者都满足的函数都是高阶函数；


声明函数类型：需要把函数参数类型放在括号中，紧接着是一个箭头和函数的返回类型（函数类型声明总是需要一个显式的返回类型，Unit类型的返...]]></description><category></category></item><item><title><![CDATA[第七章：运算符重载及其他约定]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/88849161</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/88849161</guid><author>ChrisSen</author><pubDate>Thu, 28 Mar 2019 22:34:21 +0800</pubDate><description><![CDATA[重载算术运算发

重载运算符需要使用关键字： operator , 表明该函数作为相应的约定来实现；
Kotlin限制了可以重载的运算符

注意：

不要求两个运算数的类型相同；
不会自动支持交换性（1.5 * p &amp; p *1.5），由于两个运算数的类型不同，需要在相应的类型中做相应的重载处理（扩展函数…）
返回类型可以不同于任一运算符类型


重载复合赋值运算符
返回值为Unit,名为...]]></description><category></category></item><item><title><![CDATA[第六章：类型系统]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/88682157</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/88682157</guid><author>ChrisSen</author><pubDate>Wed, 20 Mar 2019 15:14:35 +0800</pubDate><description><![CDATA[可空性（空安全）

帮助解决NullPointerException , 解决问题的方法：把运行时错误转变成编译期错误 ；
Kotlin通常要求你在构造方法中初始化所有属性，如果某个属性是非空类型，你就必须提供非空的初始化值，否则你就必须使用可空类型；
Kotlin对可空类型的显式支持 ，允许在程序中指出哪些变量和属性允许为Null，如果一个变量为null，那么对它的调用就是不安全的；
在传递参数...]]></description><category></category></item><item><title><![CDATA[Hash算法总结]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/88658604</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/88658604</guid><author>ChrisSen</author><pubDate>Tue, 19 Mar 2019 11:41:50 +0800</pubDate><description><![CDATA[原文地址：https://www.jianshu.com/p/bf1d7eee28d0
1. Hash是什么，它的作用
先举个例子。我们每个活在世上的人，为了能够参与各种社会活动，都需要一个用于识别自己的标志。也许你觉得名字或是身份证就足以代表你这个人，但是这种代表性非常脆弱，因为重名的人很多，身份证也可以伪造。最可靠的办法是把一个人的所有基因序列记录下来用来代表这个人，但显然，这样做并不实际。而...]]></description><category></category></item><item><title><![CDATA[第五章：Lambda编程]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/88552477</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/88552477</guid><author>ChrisSen</author><pubDate>Mon, 18 Mar 2019 14:00:53 +0800</pubDate><description><![CDATA[Lambda表达式和成员引用

Lambda本质上是可以传递给其他函数的一小段代码 ；
函数式编程提供了另外一种解决问题的方法：把函数当作值 来对待；
Lambda和集合

maxBy{} 指定比较哪个值找到最大元素，需要一个参数：一个函数
可以使用**it（默认参数名称）**来指定集合中的元素，如果当前上下文期望的是只有一个参数的lambda且这个参数的类型是可以被推断出来的；
成员引用 ::
...]]></description><category></category></item><item><title><![CDATA[第四章：类、对象和接口]]></title><link>https://blog.youkuaiyun.com/ChrisSen/article/details/88423195</link><guid>https://blog.youkuaiyun.com/ChrisSen/article/details/88423195</guid><author>ChrisSen</author><pubDate>Wed, 13 Mar 2019 09:40:48 +0800</pubDate><description><![CDATA[定义类继承结构

接口的声明：关键字： interface ，可以有一个默认实现，只需要提供方法体即可；
继承（实现）使用：符号，一个类可以实现任意接口，但只能继承一个类（与Java相同）；override修饰符用来标注被从重写的父类或者接口的方法和属性，被强制要求；

调用父类的实现方法： super.method()
允许创建基类： open修饰符来修饰该类，此外需要给每一个可以被重写的属性和...]]></description><category></category></item></channel></rss>