自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Kotlin 扩展函数的局限与注意点总结

一、扩展方式对扩展函数的影响Kotlin是一种静态类型语言,我们创建的每个对象不仅具有运行时,还具有编译时类型,开发人员必须明确指定(在Kotlin中可以判断)。在使用扩展函数时,要清楚地了解静态调用和动态调用之间的区别。1.静态与动态调度public class Base { public void payfoo() { System.out.printl...

2020-03-22 23:25:19 140

原创 总结几个Kotlin扩展的应用

一、用扩展函数优化Snackbar例如一般Snackbar的使用:Snackbar.make( coordinatorLayout!!, "这是一个snackbar", Snackbar.LENGTH_SHORT).show()Anso框架中Snackbar的扩展函数。inline fun View.snackbar(message: Int, ...

2020-03-21 17:31:10 817

原创 Kotlin标准库中常用扩展函数总结

Kotlin标准库中有一些非常实用的扩展函数。run/** * Calls the specified function [block] with `this` value as its receiver and returns its result. */@kotlin.internal.InlineOnlypublic inline fun <T, R> T.run...

2020-03-15 11:56:07 94

原创 Kotlin多态和扩展总结

一.多态的不同方式对Java而言,多态是面向对象设计的一个重要特征。当我们使用一个子类继承一个父类的时候,这就是子类型多态。另一种是参数多态(泛型)。1.1子类型多态class PayCustomerHelper(context: Context) : SQLiteOpenHelper(context, "kotlin.db", null, 1) { override fun...

2020-03-14 15:58:44 141

原创 Android实现文本折叠效果

小需求:默认展示4行,超过4行出现“查看全部”,点击则加载浮层显示完整内容;实现是参考下面网址代码,但是有一些改动(主要涉及纯引英文的文本下面网址的代码可能有些问题)https://www.jianshu.com/p/f4f99eb932d4最终显示代码如下:import android.content.Contextimport android.graphics.Col...

2020-03-07 17:52:32 1310

原创 Kotlin总结之内联函数

在Kotlin 中使用 Lambda表达式会带来一些额外的开销。但可以通过内联函数优化。一. 优化Lambda开销在Kotlin中每次声明一个Lambda表达式,就会在字节码中产生一个匿名类。该匿名类包含了一个invoke方法,作为Lambda的调用方法,每次调用的时候,还会创建一个新的对象。可想而知,Lambda虽然简洁,但是会增加额外的开销。Kotlin 采用内联函数来优化Lambda...

2020-03-07 12:06:57 136

原创 Kotlin集合库的设计总结(部分)

一、集合的继承关系Iterable为Kotlin集合库的顶层接口。每一个集合分为两种,一种为带Mutable前缀的,另一种则是不带的。比如常见的列表分为MutableList和List,List实现了Collection接口,MutableList实现了MutableCollection和 List接口,MutableList表示可变的 List,而List表示只读List。其实Kotli...

2020-03-01 09:43:26 113

原创 Lambda和集合总结( 部分)

在集合操作中使用Lambda会使代码变得非常简洁和优雅,但是这种简洁和优雅也是有代价的,就是在Kotlin中使用Lambda表达式会带来一些额外的开销。为了解决这个问题,所以要了解下内联函数。1.调用Java函数式接口textClick.setOnClickListener(object : View.OnClickListener{ override fun onClick(v...

2020-02-24 23:54:58 164

原创 Kotlin总结之协变与逆变

1.为什么List<String>不能赋值给List<Object>?通过反证法看这个问题,如果List<String>能赋值给List<Object>会出现什么情况?public static void main(String[] args) { List<String> strList = new ArrayList...

2020-02-19 23:53:28 235

原创 Kotlin面向对象总结之泛型(部分,涉及泛型类、泛型参数使用)

范型的优势:1.类型检查,能在编译时就能帮你检查出错误。2.更加语义化,比如声明一个List<String>,可以知道存储的是String对象,而不是其他对象。3.自动类型转换,获取数据时不需要进行类型强制转换。4.能写出更加通用化的代码。在Kotlin中使用泛型1.声明一个泛型类和泛型函数//泛型类可以继承另一个类class PaySmartLi...

2020-02-16 17:29:00 300

原创 Kotlin面向对象总结(Any、Any?、Nothing、自动装箱与拆箱、数组类型)

Java并不能在真正意义上被称作一门“纯面向对象”语言,因为它的基本类型与函数并不能看作对象。在Kotlin类型系统中,并不区分基本数据类型与包装类型。Kotlin类型结构图(选取String、Int、自定义类型)Any;非空类型的根类型与Object作为Java类层级结构的顶层类似,Any类型是 Kotlin 中所有非空类型的超类。对于Kotlin 来说,...

2020-02-15 12:12:15 558

原创 Kotlin类型系统总结(可空类型、非空断言、类型检查、智能转换、强制转换)

Java如何解决NPE问题?1.函数内对于无效值,更倾向于抛异常处理。特别地,在Java里应该使用专门的自定义Checked Exception。对于经常出现无效值的、有性能需求或在代码中经常使用的函数并不合适。对于自身可取空值的类型,比如说集合类型,通常返回零长度的数组或者集合,虽然会多出内存开销。2.采用@NotNull/@Nullable标注。对于一段复杂的代码,检查参数是否为空是一...

2020-02-14 16:58:38 86

原创 Kotlin代数数据类型总结(部分)

什么是代数数据类型(ADT)?比如通过常见的枚举来创建一个简单的代数数据类型。常见的代数类型是“和”类型与“积”类型。代数:就是能代表数字的符号。像一元方程:x+5=6y*3=21上面的x,y 就是代数,x代表数字1,y代表数字7。对于操作符:“+”和“*”,通过代数和操作符能做什么?x*1=za+2=c像上面的x 与1相乘得到新的代数。a与2相加得到...

2020-02-12 21:21:58 155

原创 kotlin面向对象总结-伴生对象

在Java中,static修饰的内容属于类,而不属于具体对象。在Kotlin中,引入了全新的关键字object,代替使用static的场景。Kotlin中伴生对象——companion object两个关键字。伴生对象,“伴生”是相较于一个类而言的,,意为伴随某个类的对象,它属于这个类所有,因此伴生对象跟Java中static修饰效果性质一样,全局只有一个单例。它需要声明在类的内部,在类被...

2020-02-09 15:32:32 80

原创 kotlin面向对象总结-数据类

kotlin通过data class创建数据类。package com.example.kotlindemo.classsdemodata class PayDataBird(var weight: Double, var age: Int, var color: String)Kotlin转javapublic final class PayDataBird { pri...

2020-02-07 17:25:25 164

原创 Kotlin面向对象总结-解决多继承的问题

kotlin和Java一样只支持类的单继承。1.接口实现多继承kotlin中的接口与Java很相似,但它除了可以定义带默认实现的方法之外,还可以声明抽象的属性。用kotlin接口实现多继承package com.example.kotlindemo.classsdemointerface PayKFlyer { fun fly() fun kind(...

2020-02-06 16:25:39 274

原创 Kotlin面向对象总结-访问控制原则

在Java中,如果希望一个类被别人继承或者修改,那么可以使用 final来修饰它。可以用 public、private、protected等修饰符来描述一个类、方法或属性的可见性。Kotlin在默认修饰符的设计上采用了与Java不同的思路。Kotlin相比Java,对一个类、方法或属性有着不一样的访问控制原则。限制修饰符指定一个类、方法或属性的修改或者重写权限时,需要用到限制修饰...

2020-02-05 21:14:42 265

原创 Kotlin面向对象总结-构造函数

kotlin中通过class结构体来声明一个类。//Kotlin中的类class PayBird { val weight: Double = 100.0 val color: String = "blue" val age: Int = 1 fun fly() { }}一些特点:1.不可变属性成员。Kotlin用 va...

2020-02-04 11:45:14 116

原创 Kotlin面向对象总结-延迟初始化与主从构造函数

延迟初始化: by lazy 和 lateinitby lazyclass PayFlyAnimal(val weight: Double, val age: Int, val color: String) { val sex: String by lazy { if (color == "yellow") "male" else "female" }...

2020-02-04 09:48:25 1331

原创 Kotlin基础总结(部分二) 字符串

kotlin中字符串的定义和操作fun main() { val str = "hello world!" println("str.length:" + str.length) println("str.substring(0,5):" + str.substring(0, 5)) println(str + " hello!!") printl...

2020-02-01 16:30:12 284

原创 Android如何获取软键盘的高度

下面代码中Log打印的displayHeight是窗口可视区域的高度,因为style设置的windowNoTitle为true,所以这个高度和通过setContentView设置的布局的可见高度是相同的,所以也可以认为是R.layout.activity_measure_soft_key的可见高度。Log中的parentHeight是视图的根元素的高度,根元素是一个FrameLayout,只有...

2020-01-31 20:15:43 2809

原创 Kotlin基础语法总结(部分)

1.增强的类型推导。(类型推导是Kotlin在Java基础上增强的语言特性之一)fun main(args: Array<String>) { val str = "Kotlin" val numberInt = 123456 val numberLong = 123456L val numberFloat = 12.45f val ...

2020-01-31 14:43:41 356

原创 Activity打开后被应用快照遮住的问题

为公司的银联二维码功能增加一个桌面快捷方式功能的时候,遇到一个头疼的问题,问题如下:测试来回切换app主界面的四个tab,然后点击home键,点击桌面快捷方式,概率性出现银联二维码界面被主界面快照遮盖。现象(银联二维码界面被主界面快照遮盖后):1.进入最近任务栏,发现最近任务栏中的快照也是主界面的Activity, 也是错误的。2.通过adb查看任务栈信息,发现任务栈信息是正常的,...

2020-01-18 16:14:02 3081

原创 Android 8.0 Activity启动流程分析

Activity启动过程中需要注意的一些类:Instrumentation 完成对Application和Activity初始化和生命周期调用的工具类。用来监控系统与应用的交互。 ActivityThread 管理应用进程的主线程的执行。 ApplicationThread 用来实现ActivityManagerService与ActivityThread之间的交互...

2020-01-18 15:33:13 3244

原创 微信小程序使用cover-view注意点

<cover-view/> 内只能嵌套 <cover-view/> <cover-image/> <button/> <navigator/> <ad/>,view 标签的子节点树在真机上都会被忽略。

2019-03-21 18:04:32 4485

原创 微信小程序判断微信客户端版本是否支持蓝牙

微信客户端是否支持蓝牙判断onLaunch: function() { ... ... this.globalData.sysinfo = wx.getSystemInfoSync(); }getModel() { //获取手机型号 return this.globalData.sysinfo["model"]; }, getVer...

2019-03-19 17:24:17 883

原创 微信小程序实现首次启动引导页只显示一次

如果是在app.js的onLaunch: function() {}方法中判断打开哪个界面的话会闪现配置文件中的第一个界面。所以修改方案如下:1.配置一个空白页,默认进入。2.在空白页的onLoad方法中判断进入哪个界面,然后调用wx.redirectTo跳转到指定界面。例:空白页 onLoad: function (options) { app.enterMai...

2019-03-13 18:35:29 11284

原创 微信小程序 是否支持webp格式图片

目前不支持,因为iOS本身是不支持webp的。

2019-03-12 13:47:01 5341

原创 如何在微信小程序里面实现跨页面通信?

这篇文章写得很好,在微信小程序上实现了类似EventBus的效果。https://www.jianshu.com/p/2ba137a02f09

2019-03-11 15:35:30 212

原创 chrome扩展cookie使用

要使用cookies API, 你必须在你的清单中声明"cookies"权限,以及任何你希望cookie可以访问的主机权限。例如:{ "name": "My extension", ... "permissions": [ "cookies" ], ...}setCookies: function(url, nam...

2019-03-10 10:21:49 4531

原创 css中relative、absolute和float

position:relative和position:absolute都可以改变元素在文档流中的位置,设置position:relative或position:absolute都可以让元素激活left、top、right、bottom和z-index属性(默认情况下,这些属性未激活,设置也无效)网页虽然看起来是平面的二维结构,但其实是有z轴的,z轴的大小由z-index控制,默认情况下,...

2019-03-09 18:34:22 593 3

原创 微信小程序中app.js中无法调用setData方法的

确实,在app.js中是没有setData方法的。

2019-03-08 16:27:09 3359 5

原创 块级元素和行内元素的区别

布局的基本元素:块级元素和行内元素。块级元素有:div、p、form、ul、ol、li等。常见的行内元素有span、strong、em等。区别:1.块级元素会独占一行,默认情况下,其宽度自动填满其父元素的宽度。2.行内元素不会独占一行,相邻的行内元素会排列在同一行里,直到一行排不下,才会换行,其宽度随元素的内容而变化。3.块级元素可以设置width、height...

2019-03-08 09:44:20 229

原创 微信小程序插件使用总结

小程序插件简介小程序插件是可以被开发者添加到小程序内直接使用的,能为用户提供具体服务的功能组件。插件开发者可像开发小程序一样开发插件,除了在自己的小程序内使用,还能提供给其他小程序直接使用。插件使用者无需独立开发小程序内的所有服务,无需理解插件内部逻辑和实现方式,可直接使用别人开发好的插件,为用户提供相应服务。小程序插件的应用1.开发共享,避免重复开发在小程序内使用插件,可...

2019-03-05 15:50:48 584

原创 微信小程序定位总结

wx.getLocation(Object object)调用前需要 用户授权 scope.userLocation获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用。wx.getLocation({ type: 'wgs84', success(res) { const latitude = res.latitude const lo...

2019-03-04 14:21:05 558

原创 微信小程序蓝牙使用总结

微信小程序获取蓝牙流程注意点:wx.openBluetoothAdapter(Object object):初始化蓝牙模块。其他蓝牙相关 API 必须在 wx.openBluetoothAdapter 调用之后使用。否则 API 会返回错误(errCode=10000)。在用户蓝牙开关未开启或者手机不支持蓝牙功能的情况下,调用 wx.openBluetoothAdapter 会...

2019-02-27 17:51:22 2131 2

原创 Chrome扩展之书签

Chrome为开发者提供了添加、分类(书签文件夹)和排序等方法来操作书签,同时也提供了读取书签的方法。 要在扩展中操作书签,需要在Manifest中声明bookmarks权限: "permissions": ["bookmarks"]在具体讲解操作书签的方法前,先让我们来了解一下书签对象的数据结构。书签对象有8个属性,分别是id、parentId、index、url、t...

2019-02-17 16:41:57 621

原创 React UI组件和容器组件

UI组件负责页面的渲染,容器组件负责页面的逻辑。拆分TodoList中页面渲染部分的代码:import React, { Component } from 'react';import { Input, Button, List} from 'antd';class TodoListUI extends Component{ render() { ret...

2019-02-17 12:02:02 827

原创 Redux设计和使用的三项原则

1.store必须是唯一的。import { createStore } from 'redux';import reducer from './reducer';//创建公共存储工具,如果window下有这个变量,则执行这个变量对应的方法。const store = createStore(reducer, window.__REDUX_DEVTOOLS_EXTENSION__ &...

2019-02-16 15:23:02 272 1

原创 信息应用 彩信UI的修改以及信息列表搜索总结

彩信UI的修改彩信UI的修改是整个信息需求中改动最大的部分,这里不描叙彩信UI是如何修改(UI的修改说白就是自定义控制而已,没啥说的),而是着重描叙“在哪里修改”。这里依旧以添加图片为例,ComposeMessageActivity.addImage会调用WorkingMessage.setAttachment来添加附件,添加后会有个回调:mStatusListener.onAttachmen...

2019-02-16 10:46:08 171

提示
确定要删除当前文章?
取消 删除