- 博客(86)
- 收藏
- 关注
原创 从0 到1开发一款App(三):设计
我们先回顾一下上篇文章,上篇文章中我们主要讲了和产品相关的内容,包括优秀的产品、它们所具备的优秀特质以及《麻雀笔记》的产品思想等,还没看过的朋友可以点击下方链接进行阅读:https://blog.csdn.net/ChrisSen/article/details/95194869今天这篇文章主要讲一下跟设计相关的内容,共分为三个部分:设计风格资源分享夜间模式设计风格软件的整体设计...
2019-09-02 09:46:38 689 1
原创 从0 到1开发一款App(二):产品
我们先回顾一下上篇文章,上篇文章中我们主要讲了四个部分的内容,分别是自我介绍、产品、开发《麻雀笔记》的初衷以及开发一款App的难易等问题。还没看过文章的朋友可以点击链接阅读:https://blog.csdn.net/ChrisSen/article/details/92801094这篇文章主要讲一下跟产品相关的东西,由于本人并非产品经理,也未从事过与产品相关的工作,仅仅是因为平时自己喜爱产品...
2019-07-17 12:01:37 715 1
原创 从0到1开发一款App(一):前言
大家好,我是《麻雀笔记》App的开发者,随着新版本的上架,我也萌生了写一系列关于如何开发一款App的文章,这个系列打算就叫《从0到1开发一款App》了,是不是感觉很土low,没有关系,只要内容不low就行。这个系列目前的规划大概会有八篇文章左右,分别会介绍与产品、设计、开发、测试以及运营等等相关的内容。我打算用两个月左右的时间把这个系列写完,这个系列可以算得上是对我前期所有工作的一个总结与概...
2019-06-20 23:55:54 1833
原创 Google Awareness API使用与介绍
前言在开发中,有的时候需要我们监听很多系统的状态,比如:是否有耳机插入、当前用户的活动状态(跑步,散步,静止状态等)。通过检测这些状态,我们可以做很多人性化的操作,比如:监听到用户插入了耳机,我们可以打开音乐播放器准备播放音乐。插一句,如果你是安卓的老用户,你可能知道安卓上有一款应用叫Tasker。这款应用是通过用户设定一些条件,当触发了设定好的条件后会执行用户已经指定好的操作。概括起来就是:...
2019-02-14 09:18:47 1497
原创 图文短视频信息流开发总结(仿小红书, Instagram)
少废话,先看效果需求分析在开发中需要实现图文视频信息流的功能,可以参考下面的动图:上面的动图来自小红书,我们可以发现:整个列表中有图片(多张)以及视频,视频是可以自动播放的。根据需求,我们来需要实现图片标签的功能,这一块我们是参考Instagram的效果。见下图:很抱歉,gif中没有很好的体现需要实现的效果,那么我就用文字描述一下吧。如果图片上有标签,那么当滑动到图片时,需要显示一个...
2018-11-22 09:55:20 4341 3
原创 高仿饿了么新增位置
最近由于公司的需求需要实现饿了么新增地址的效果,于是总结一下实现的方式以及在实现的过程中需要注意的一些地方。首先我们来看一下饿了么新增地址的效果。总结一下需要实现的效果有哪些:定位滑动地图时能够及时的获取到地图中心点的位置信息滑动时以及停止滑动的时的动画效果点击位置信息后获取附近位置列表首先我们来分析一下这几个问题:定位的话可以使用高德地图,当然也可以使用百度地图,最终我们采用的是高德地图;滑动时...
2018-05-29 18:05:16 2913 8
原创 一款与众不同的壁纸应用——《MW地图壁纸》
每天花些时间选择一张适合的图片设为桌面壁纸是我一天当中必做的事情。对于壁纸的选择,首先要符合我的审美,我是一个简单的人,所以在选择壁纸时我更多的会青睐简洁、有质感的壁纸。其次,要与众不同,彰显我的个性,最好还能装装B。当我试遍了许许多多的壁纸应用(包括静态壁纸与动态壁纸)后,发现能一直让我保持新鲜感同时又能满足我的需求的应用几乎没有,于是我产生了开发一款属于自己的壁纸应用,而现在它将属于你我每一个...
2019-07-07 11:55:09 1444
转载 Android软键盘的全面解析,让你不再怕控件被遮盖
本文转载自:https://blog.csdn.net/l540675759/article/details/74528641背景1.Android软键盘这块从我入职到现在,是一个一直纠缠我的问题。2.从布局挤压,到EditText显示不全,在到弹出时卡顿,在Android软键盘面前我无数次跌倒。3.因为网上大多数的知识点比较分散而且很杂,所以本篇做一个整合篇。4.Android软键盘这...
2019-06-19 23:26:57 578
原创 弹出Dialog的时候如何调出输入法?
如果Dialog里面有一个输入框,弹出的时候需要弹起输入法,该怎么操作呢?设置属性:dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); dialog.getWindow()....
2019-05-29 12:03:35 1082
原创 改变虚拟导航栏(navigation bar)背景色及图标颜色
众所周知,安卓系统中存在着虚拟的导航栏,它们不是实体按键,而是通过软件实现的。一般而言,虚拟导航栏是长成下面这样的:系统中默认虚拟导航栏的背景是黑色的,按键的颜色是白色。但是如果软件需要自定义主题色,很多时候,我们都希望它的背景色能跟主题色保持一样。那我们怎么实现呢?<item name="android:navigationBarColor">@color/colorPrima...
2019-05-16 09:12:07 22300
原创 如何关闭跨进程的前台服务?
工作中遇到了这样一个问题:App支持记步功能,在开发的时候我把它放到了单独的进程中,为了能够实现App在后台也能记步的功能,在进程中开启了一个前台服务。之前由于产品的功能模块比较少,所以不支持它的关闭与开启,但是随着软件的迭代更新,功能模块越来越多,于是产品需要实现这样的需求:当用户把步数的功能拿掉后,对应的记步通知也要消失;把步数功能添加进导航栏,记步的通知也要随之出现在通知栏。上图是添加了...
2019-05-13 22:54:28 1025
原创 DSL构建:领域特定语言
什么叫API整洁?能够让读者清楚的知道在代码中发生了什么(选择良好的名称和概念)代码需要看起来整洁,极少使用浮夸的代码且不存在冗余的语法领域特定语言的概念通用编程语言(解决几乎所有能被计算机解决的问题);领域特定语言(专注在特定任务,或者说领域上,并放弃与该领域无关的功能)最常用的DSL语言:SQL & 正则表达式DSL趋向于声明式(描述了想要的结果并将执行的细...
2019-05-10 19:20:49 1954
转载 Android指纹识别API讲解,一种更快更好的用户体验
本文转载自:https://blog.csdn.net/guolin_blog/article/details/81450114我发现了一个比较怪的现象。在iPhone上使用十分普遍的指纹认证功能,在Android手机上却鲜有APP使用,我简单观察了一下,发现Android手机上基本上只有支付宝、微信和极少APP支持指纹认证功能,就连银行和金融类的应用都基本不支持,甚至很多开发者都不知道And...
2019-05-09 16:41:46 369
原创 Kotlin中最常用的80个关键字
fun 函数声明val / var 变量声明${} 字符串模板import 导入任何种类的声明enum class 枚举when 分支表达式… 区间表达式(递增,闭区间)until (递增,开区间)for( a in…) 循环down To 递减step设置步长in !in 判断对象是否在集合或区间中const val 类似于Java中static final ,适用于...
2019-05-06 20:32:45 2103
原创 第十章:注解与反射
注解应用注解: 关键字@常用:@Deprecated 被废弃, 可以使用replaceWith参数增强它。该注解可以传入参数message, replaceWith, level。参数类型:基本数据类型、字符串、枚举、类引用、其他的注解类以及前面这些类型的数组;注意:把一个类指定为注解实参,在类名后加上::class ; 把另外一个注解指定为一个实参,去掉注解名称前面的@; 要把一个数组...
2019-04-28 22:33:46 266
原创 第九章:泛型
泛型类型参数类型参数约束:限制作为(泛型)类和(泛型)函数的类型实参的类型如果把一个类型指定为泛型类型形参的上界约束,在泛型具体的初始化中,其对应的类型实参就必须是这个具体类型或者是它的子类型。指定多个约束:使用关键字where没有指定上界的类型形参将会使用Any?这个默认的上界 , 如果想让类型参数始终是非空类型,需要使用Any或其子类型。运行时的泛型JVM 上的泛型一般是...
2019-04-25 19:18:14 270
原创 竟然还有数据运营?
前言昨天收到友盟的一份邮件,里面是介绍一场关于数据分析大赛的报名活动。活动的详情请点击这里:https://info.umeng.com/detail?id=116&&cateId=1?utm_source=pcedm恰巧的是最近我女朋友正要找运营相关的工作,于是顺便就了解了一些关于运营的工作,发现运营岗位分的很细,具有所知道有内容运营、新媒体运营、社区运营等。于是就抱着好奇...
2019-04-10 21:47:28 766 1
原创 第八章:高阶函数:Lambda作为形参和返回值
声明高阶函数高阶函数定义:是以另外一个函数作为参数或者返回值的函数;在Kotlin中可以用lambda或者函数引用来表示函数;任何以lambda或者函数引用作为参数的函数,或者返回值为lambda或者函数引用的函数或者两者都满足的函数都是高阶函数;声明函数类型:需要把函数参数类型放在括号中,紧接着是一个箭头和函数的返回类型(函数类型声明总是需要一个显式的返回类型,Unit类型的返...
2019-04-03 18:54:25 2169
原创 第七章:运算符重载及其他约定
重载算术运算发重载运算符需要使用关键字: operator , 表明该函数作为相应的约定来实现;Kotlin限制了可以重载的运算符注意:不要求两个运算数的类型相同;不会自动支持交换性(1.5 * p & p *1.5),由于两个运算数的类型不同,需要在相应的类型中做相应的重载处理(扩展函数…)返回类型可以不同于任一运算符类型重载复合赋值运算符返回值为Unit,名为...
2019-03-28 22:34:21 440
原创 第六章:类型系统
可空性(空安全)帮助解决NullPointerException , 解决问题的方法:把运行时错误转变成编译期错误 ;Kotlin通常要求你在构造方法中初始化所有属性,如果某个属性是非空类型,你就必须提供非空的初始化值,否则你就必须使用可空类型;Kotlin对可空类型的显式支持 ,允许在程序中指出哪些变量和属性允许为Null,如果一个变量为null,那么对它的调用就是不安全的;在传递参数...
2019-03-20 15:14:35 360
转载 Hash算法总结
原文地址:https://www.jianshu.com/p/bf1d7eee28d01. Hash是什么,它的作用先举个例子。我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志。也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人很多,身份证也可以伪造。最可靠的办法是把一个人的所有基因序列记录下来用来代表这个人,但显然,这样做并不实际。而...
2019-03-19 11:41:50 659
原创 第五章:Lambda编程
Lambda表达式和成员引用Lambda本质上是可以传递给其他函数的一小段代码 ;函数式编程提供了另外一种解决问题的方法:把函数当作值 来对待;Lambda和集合maxBy{} 指定比较哪个值找到最大元素,需要一个参数:一个函数可以使用**it(默认参数名称)**来指定集合中的元素,如果当前上下文期望的是只有一个参数的lambda且这个参数的类型是可以被推断出来的;成员引用 ::...
2019-03-18 14:00:53 745
原创 第四章:类、对象和接口
定义类继承结构接口的声明:关键字: interface ,可以有一个默认实现,只需要提供方法体即可;继承(实现)使用:符号,一个类可以实现任意接口,但只能继承一个类(与Java相同);override修饰符用来标注被从重写的父类或者接口的方法和属性,被强制要求;调用父类的实现方法: super.method()允许创建基类: open修饰符来修饰该类,此外需要给每一个可以被重写的属性和...
2019-03-13 09:40:48 395
原创 第十一章:Web 的攻击技术
针对 Web 应用的攻击模式主动攻击主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。主动攻击模式里具有代表性的攻击是 SQL 注入攻击和 OS 命令注入攻击。被动攻击被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式。在被动攻...
2019-03-08 11:40:16 273
原创 第十章:构建 Web 内容的技术
Web 页面几乎全由 **HTML (HyperText Markup Language,超文本标记语言)**构建设计应用 CSS: **CSS(Cascading Style Sheets,层叠样式表)**可以指定如何展现 HTML内的各种元素,属于样式表标准之一。动态 HTML(Dynamic HTML):使用客户端脚本语言将静态的 HTML 内容变成动态的技术的总称。动态 HTML 技...
2019-03-08 11:39:53 296
原创 第九章:基于HTTP功能的追加协议
HTTP存在的问题:一条连接上只可发送一个请求;请求只能从客户端开始。客户端不可以接收除响应以外的指令;请求 / 响应首部未经压缩就发送。首部信息越多延迟越大;发送冗长的首部。每次互相发送相同的首部造成的浪费较多;可任意选择数据压缩格式。非强制压缩发送;HTTP 功能上的不足可通过创建一套全新的协议来弥补。可是目前基于 HTTP 的 Web 浏览器的使用环境已遍布全球,因此无法完全...
2019-03-08 11:39:20 280
原创 第八章:确认访问用户的身份认证
何为认证计算机本身无法判断坐在显示器前的使用者的身份。进一步说,也无法确认网络的那头究竟有谁。可见,为了弄清究竟是谁在访问服务器,就得让对方的客户端自报家门。就算正在访问服务器的对方声称自己是ueno,身份是否属实这点却也无从谈起。为确认 ueno 本人是否真的具有访问系统的权限,就需要核对“登录者本人才知道的信息”、“登录者本人才会有的信息”。核对的信息:密码 :只有本人才会知道的字符...
2019-03-08 11:38:54 372
原创 第七章:确保web安全的HTTPS
HTTP的缺点通信使用明文(不加密),内容可能会被窃听;不验证通信方的身份,因此有可能遭遇伪装;无法证明报文的完整性,所以有可能已遭篡改;这些问题不仅在 HTTP 上出现,其他未加密的协议中也会存在这类问题。TCP/IP 是可能被窃听的网络:如果要问为什么通信时不加密是一个缺点,这是因为,按TCP/IP 协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。窃听相同段...
2019-03-08 11:38:24 391
原创 第六章:HTTP首部
HTTP 协议的请求和响应报文中必定包含 HTTP 首部。请求报文由方法 、URI 、HTTP 版本 、HTTP 首部字段等部分构成。响应报文由 HTTP 版本、状态码(数字和原因短语)、HTTP 首部字段 3 部分构成。HTTP 首部字段是构成 HTTP 报文的要素之一。结构:由首部字段名和字段值构成的中间用冒号“:” 分隔;若 HTTP 首部字段重复了会如何当 HTTP 报文首部中...
2019-03-07 17:48:04 269
原创 《Kotlin实战》第三章:函数的定义与调用
Kotlin没有采用自己的集合类,而是采用标准的Java集合类;命名参数 :调用一个Kotlin定义的函数时,可以显示地表明一些参数的名称(如果指明了一个参数的名称,为了避免混淆,那它之后的所有参数都要表明名称)默认参数值:在声明函数的时候,可以指定参数的默认值,避免创建重载的函数。(可以用所有参数来调用这个函数或者省略掉部分参数)顶层函数与属性 :放在代码文件(.kt)中常量: 放在...
2019-03-07 17:47:27 393
原创 第五章:与HTTP协作的web服务器
HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站点(利用了虚拟主机(Virtual Host,又称虚拟服务器)),即使物理层面只有一台服务器,但只要使用虚拟主机 的功能,则可以假想已具有多台服务器;HTTP 通信时,除客户端和服务器以外,还有一些用于通信数据转发 的应用程序,例如代理、网关和隧道。它们可以配合服务器工作;代理:它扮演了位于服务器和客户端“中间人 ”的角色。...
2019-03-06 11:45:30 208
原创 第四章:返回结果的HTTP状态码
HTTP 状态码负责表示客户端 HTTP 请求的返回结果、标记服务器端的处理是否正常、通知出现的错误等工作;状态码如 200 OK,以 3 位数字 和原因短语组成。2XX 的响应结果表明请求被正常处理了;200 OK; 204 No Content; 206 Partial Content(客户端进行范围请求,响应报文中含有Content-Range指定范围的实体内容);3XX 重定向 ...
2019-03-04 09:21:34 314
原创 第三章:HTTP报文内的HTTP信息
用于 HTTP 协议交互的信息被称为 HTTP 报文。请求端(客户端)的HTTP 报文叫做请求报文,响应端(服务器端)的叫做响应报文。HTTP 报文大致可分为报文首部和报文主体(并不一定有)两块,由空行来划分;报文主体和实体主体的差异:报文是 HTTP 通信中的基本单位,通过 HTTP 通信传输;实体作为请求或响应的有效载荷数据(补充项)被传输;压缩传输的内容编码:内容编码指明应用在实体内...
2019-03-04 09:21:01 328
原创 第二章:简单的HTTP协议
请求访问文本或图像等资源的一端称为客户端,而提供资源响应的一端称为服务器端;应用 HTTP 协议时,必定是一端担任客户端角色,另一端担任服务器端角色;请求必定由客户端发出,而服务器端回复响应;请求报文 是由请求方法 、请求 URI、协议版本、可选的请求首部字段和内容实体构成的;响应报文 基本上由协议版本、状态码(表示请求成功或失败的数字代码)、用以解释状态码的原因短语、可选的响应首部字段...
2019-03-02 17:14:39 263
原创 《图解HTTP》第一章:了解web及网络基础
HTTP : HyperText Transfer Protocol 超文本传输协议 ,协议是指规则的约定,Web是建立在HTTP协议上通信的;为知识共享而规划web;创建者:蒂姆 • 伯纳斯 - 李(Tim BernersLee)(CERN欧洲核子研究组织);三项WWW构建技术:文本标记语言(HTML)、文本传输协议(HTTP)、文档所在地址URL(Uniform Resource Lo...
2019-03-02 09:19:06 293
原创 《Kotlin实战》第二章:基础
2.1 函数与变量函数函数的声明以关键字fun开头,函数名其后,括号括起来的是参数列表,参数列表后面跟着返回值类型,中间用冒号隔开;fun name(参数名 : 参数类型...) : 返回值类型函数的函数体可以有两种:(一)花括号;(二)表达式函数体;表达式函数体由单个表达式构成,可以用这个表达式作为完整的函数体,去掉花括号与return语句;注意:在Kotlin中...
2019-03-02 09:18:19 289
转载 这一次,彻底解决Java的值传递和引用传递
这一次,彻底解决Java的值传递和引用传递 本文旨在用最通俗的语言讲述最枯燥的基本知识学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨论的话题又是充满争议:有的论坛帖子说Java只有值传递,有的博客说两者皆有;这让人有点摸不着头脑,下面我们就这个话题做一些探讨,对书籍、对论坛博客的...
2019-02-27 18:00:25 240 1
原创 《Kotlin实战》第一章:定义与目的
概述Kotlin是一种针对Java平台的新编程语言。Kotlin简洁、安全、务实,并且专注于与Java代码的互操作性。Kotlin的主要特征目标平台服务器、Android以及任何Java运行的地方特征静态类型;意味者所有的表达式的类型在编译期就已经确定了(与Java一样)函数式与面向对象;函数式的核心概念:头等函数——把函数当作值使用,可以用变量保存它,把它当作参数传递,或者...
2019-02-26 18:23:39 423
原创 TextView不显示
今天在开发中遇到一个极其奇怪的问题:给TextView设置Text但是文字并没有显示。一开始我以为是Visibility设置为不可见,但是经过查看代码并没有。然后我又怀疑是不是文字的颜色和背景弄成一样的,导致显示出来的文字看不出来。在布局文件中查看并没有。这就诡异了啊!思前想后,左顾右盼后猜测可能是因为View还没被渲染出来,于是在setText()那一块加了view.post()于是,...
2019-02-12 15:54:09 2904 1
转载 编写优美 Android 注释的常用语法
附上Android君今天要分享的是关于Android注释系统的一些强大功能!!实践证明,拥有良好的注释是可持续维护的重要标准比如你直接查阅Activity.java 的源码,将会看到大量绿色的注释,而且仔细观察除了我们常规的注释外还有一些特定语法的注释。下面贴上一段来自官方的例子:/** * An activity is a single, focused thing that th...
2019-01-23 11:27:06 716
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人