- 博客(353)
- 资源 (2)
- 收藏
- 关注

原创 Android开发者网站博客导航
Android 开发者网址导航常用网站大厂博客大牛博客CSDN博客公众号社区论坛GitHub求职招聘面试指南在线学习应用商店常用工具常用网站Google Developers Android Developers GitHub Stack Overflow 干货集中营大厂博客美团技术团队 知乎技术专栏大牛博客胡凯 尼古...
2020-04-07 16:15:06
506
原创 Android最简单的自定义控件示例
其中第四种是最简单也是最常用的方式,通过继承LinearLayout等已有的ViewGroup,里面再放一些Buttong、TextView等其他已有的控件或ViewGroup,把他们组装起来就形成了一个新的自定义控件,再通过自定义的属性就可以对控件的一些属性进行赋值,达到复用的效果。代码很简单,功能也很简单,就是一个标题栏,可以通过app:title_name自定义属性设置标题,虽然简单,但是写法很通用。虽然说很简单,但是每次写要重新百度下怎么写,这里写一个自定义的标题栏当做备忘,也分享给大家。
2023-03-21 22:32:16
15
原创 微信小程序清除订阅消息授权数据
但是模拟器上调用wx.requestSubscribeMessage申请授权和在真机上差异很大,在模拟器上每次调用都会弹窗,不像在真机上授权后就不再弹窗,而且模拟器上一次只能显示一种消息的授权,即使代码中设置申请了多种订阅消息,为了测试用户真实的环境还是得用真机测试。惊不惊喜,意不意外,绕了一大圈,结果和在模拟器上的清除方法一样,只要模拟器上和真机上用的是同一个账号,这说明消息订阅的授权数据是存在后端而不是存在本地的,所以即使删除小程序这些授权配置还依然存在。
2023-03-20 23:47:29
47
原创 Anroid通过InputFilter限制EditText只能输入数字、大小写字母及中文
至于为什么这样写,你需要了解正则表达式以及输入理解InputFilter,可以参考下面我的另外两篇文章。废话不多说、简单粗暴、直接上代码。
2023-03-20 23:16:49
28
原创 Android InputFilter详解
项目中遇到一个需求,需要限制EditText只能输入到小数点后两位网上有两种方案,一种是使用TextWatcher,另一种就是使用InputFilter,感觉使用InputFilter的方式比较优雅,比如EditText android:inputType限制各种输入类型就是通过各种各种InputType来实现的。还有maxLength限制EditText输入长度也是通过InputFilter实现的。
2023-03-17 14:43:16
390
原创 微信小程序获取当前环境版本
开发过程中有时候需要对不同环境做不同处理,比如只在开发版或者体验版中打印某些日志,便于调试。其中envVersion有以下三种值。可以参考小程序官方文档。二话不说,直接上代码。
2023-03-04 22:15:20
71
原创 RxJava flatMap和concatMap异常的捕获
用过RxJava flatMap和concatMap的人都知道这两个操作符简直是神器,让你的代码远离回调地狱,采用链式调用的方式来写回调,简直爽歪歪,如下代码所示这种写法的下,不管哪个步骤发生异常,都会走到最后的onError,好处是可以对异常做统一的处理但是现在有个需求需要在每个步骤发生异常时做单独的处理,我第一想到的是如下的代码在每一个concatMap后面加一个doOnError来处理这一步骤发生的异常。
2023-02-20 22:04:54
76
原创 Android View scrollTo()和scroll()By()学习备忘
scroll滑动的是View的内容而不是View的实际位置,比如滑动一个TextView,滑动的是里面的文字内容,背景并不会移动scroll改变的是mScrollX和mScrollY的值mScrollX值为正,内容向左移,值为负,内容向右移mScrollY值为正,内容向上移,值为负,内容向下移scrollBy()内部实际调用的是scrollTo()方法,scrollBy实现的是相对移动,scrollTo()实现的是绝对移动。
2022-10-19 09:25:08
468
原创 Android onMeasure()测量结果的保存和获取
本文所分析源码为Android4.1 SDK中的源码我们知道onMeasure()方法对view进行测量后必须调用setMeasuredDimension()方法来对测量结果进行保存,否则会抛IllegalStateException异常。
2022-10-11 15:02:09
771
原创 Android View的onMeasure()源码分析
onMeasure()方法用来对View进行测量,确定测量的宽高onMeasure()方法是在measure()方法中调用的,measure()方法是final方法不能够重写,所以继承View实现自定义控件的时候只需重写onMeasure()方法,而无需关注measure()方法onMeasure()方法里涉及的方法有如下几个,我们一个个分析onMeasure。
2022-10-11 10:00:36
796
原创 Android View的measure()方法源码分析
mPrivateFlags &= ~MEASURED_DIMENSION_SET先把MEASURED_DIMENSION_SET标志位清除置0,在onMeasure()方法里调用setMeasuredDimension()方法后会重新把MEASURED_DIMENSION_SET标志位置1。该方法用来测量View的测量宽高,由父View调用,两个参数widthMeasureSpec和heightMeasureSpec是父View对子View宽高的约束,由父View计算并传入。
2022-10-10 14:46:25
289
原创 Android 中MeasureSpec的创建规则
在Android中,View的onMeasure()方法用来对控件进行测量,确定控件的宽高。该方法的两个参数widthMeasureSpec和heightMeasureSpec由父View计算后传入子view的measure()方法,再由子view的measure()方法传入onMeasure()方法,本文将介绍MeasureSpec的创建规则子view的MeasureSpec创建规则如下表所示。
2022-10-10 00:33:09
211
原创 Android MeasureSpec详解
我们在自定义控件的时候经常要重写View的onMeasure方法,onMeasure方法有两个int类型的参数,这两个参数就是MeasureSpec,这两个参数可不是普通的int数值,里面包含了mode和size两个信息,一个int有32位二进制,用高2位表示mode,低30位表示size,这样在一个int里面包含两个数值信息的设计,是为了减少对象的创建和内存的分配onMeasure()方法用来测量空间的宽高,方法中的MeasureSpec参数由控件的父布局传入,是父View对子View的宽高的约束。
2022-10-09 13:45:44
374
原创 面向对象设计原则之接口隔离原则
接口隔离原则 Interface Segregation Principle,简称ISP内容:使用多个专门的接口比使用单个总接口好也就是说,一个类对另一个类的依赖应当是建立在最小的接口上的。
2022-09-17 22:56:56
95
原创 面向对象设计原则之依赖倒转原则
依赖倒转原则 Dependence Inversion Principle,简称为DIP依赖倒转原则的内容是:要依赖于抽象,不要依赖于具体实现原文为:Abstractions should not depend upon details.Details should depend upon abstractions.翻译为:抽象不应当依赖于细节,细节应当依赖于抽象另一种表述为:Program to an interface, not an implementation.(要面向接口编程,不要。
2022-09-17 15:33:35
184
原创 面向对象设计原则之里氏代换原则
假设有类型T1及其对象O1以及类型T2及其对象O2,在程序中T1定义的所有对象O1都替换成O2时,程序的行为不会发生任何变化,那么可以认为T2是T1的子类也就是说软件中使用的是基类的话,那么也适用于子类,且软件功能不会受影响比如一个方法接收的是一个父类,那么该方法必然可以接收该父类的任何子类。
2022-09-17 10:57:39
101
原创 面向对象设计原则之开闭原则
例如对于某一需求抽象出一个接口或者抽象类,这一接口或抽象类中定义的抽象方法,一旦定以后就不允许再修改,这对应的就是开闭原则的第二条——对修改关闭。开闭原则从另一个角度讲,就是所谓的“对可变性的封装原则”,找到一个系统的可变因素,将之封装起来。而对于这一定义好的接口可以有无穷无尽个不同的实现,这对应的就是开闭原则的第一条——对扩展开放。Open-Closed Principle,缩写为OOP,是面向对象设计的第一块基石。对于面向对象语言来说,不允许修改的是抽象层,而允许修改的是实现层。
2022-09-17 10:01:20
66
原创 RxJava retryUtil()方法使用详解
因为第一轮完后total值为6,小于12,所以这时候发生异常会retry重新循环,当第二次循环完发生异常的时候,total值已经累加到12,这时候BooleanSupplier的getAsBoolean()方法返回true,表示发生异常不再tetry,所以这时候会走到onError。retryUntil方法传入一个BooleanSupplier对象,提供发生异常后的重试的逻辑,返回false表示发生异常会重试,直到返回false才不会重试。...
2022-08-31 09:50:27
542
原创 Java双重检查懒汉式单例模式中volatile的作用
初始化对象放到了最后,这在单线程环境中是没问题的,但是在多线程环境中就有可能出现问题,拿到的对象可能是还未初始化的,使用对象的时候就会出现问题。所以为了防止指令重排导致的问题,在双重检查懒汉式单例模式中,实例对象必须用volatile关键字修饰。使用volatile关键字的作用是进制JVM在创建实例的时候进行指令重排。由于JVM进行指令重排,以上指令顺序可能发生变化,可能变成如下顺序。可以看到单例对象用关键字volatile声明,而且是必不可少的。JVM在执行new创建对象的时候会执行下面三条指令。...
2022-08-28 00:07:18
313
原创 Java设计模式-单例模式
单例模式(singleton)有一下三个要点为了保证单例类的实例只能由单例类自己创建,需要将单例类的构造方法设置成private私有,防止构造方法被其他类调用单例模式有饿汉式、懒汉式等实现方式,下面一一做介绍。...
2022-08-27 23:04:56
78
原创 Java设计模式-抽象工厂模式
在前面介绍的简单工厂模式和工厂方法模式中都是只有一个产品等级结构,也就是只定义了一个抽象的产品类,而抽象工厂模式最大的区别就是定义了多个产品等级结构,也就是定义了多个抽象产品类,而这些抽象产品类下又可以实现多个具体的产品类这样讲可能比较抽象,我们以具体的示例来讲解假设有IPhone(此IPhone非彼iPhone)和IComputer两个抽象接口,分别表示手机品类和电脑品类IPhone下两个具体的实现类XiaomiPhone和HuaweiPhone,表示小米手机和华为手机。
2022-08-25 15:26:28
540
原创 Java设计模式-工厂方法模式
简单工厂模式有个缺点就是需要负责所有产品的创建工作,且一旦有新的产品加入,就需要修改工厂类,而工厂方法模块可以克服这个缺点,支持开闭原则。工厂方法模式定义了一个生产产品对象的接口,把具体的创建对象的工作交给实现该接口的子类。最后实现不同的工厂,不同的工厂负责不同的产品的生产。Factory1负责Product1的生产。Factory2负责Product2的生产。先分别定义工厂和产品的接口。
2022-08-25 11:34:00
96
原创 java 判断数组中是否包含某个元素
其实写个循环判断就可以了,如果懒得写代码可以直接用apache库的ArrayUtils.contains方法import org.apache.commons.lang3.ArrayUtils;int[] array = {1, 2, 3};boolean b = ArrayUtils.contains(array, 1);其实ArrayUtils.contains()其内部也是写一个循环,源码如下public static boolean contains(int[] array,.
2020-10-31 23:39:00
1123
原创 java数组转List方法
方法一List<String> list = new ArrayList<>(Arrays.asList(array));方法二List<String> list = new ArrayList<>(array.length);Collections.addAll(list, array);
2020-10-31 23:14:36
223
原创 Spring Boot SLF4J+Logback日志组件入门(一)——控制台打印
Spring Boot中默认集成了SLF4j+Logback,不用额外的maven依赖配置就可以直接使用默认实现Logback有一个默认的最简单配置的控制台实现,不用额外的配置文件就可以输出日志到控制入,如下代码所示@RunWith(SpringRunner.class)@SpringBootTestpublic class LogbackTests { private Logger logger = LoggerFactory.getLogger("yeyuanxinyi");
2020-09-11 14:06:25
411
原创 slf4j Logger使用{}占位符输出日志
使用很简单,直接上代码private Logger logger = LoggerFactory.getLogger("yeyuanxinyi");logger.info("String={},int={},double={}", "野猿新一", 25, 99.9);输出结果如下2020-09-10 16:51:31,794 custom-logback INFO [http-nio-55557-exec-1] yeyuanxinyi - String=野猿新一,int=25,doub.
2020-09-10 17:02:20
2632
原创 Spring Boot slf4j+logback 日志组件学习资料汇总
官方文档LOGBack官网Logback documentation:官方文档官方文档很详细,但是内容也很多,不适合初学者,会被吓到想深入研究的可以看看logback的使用和logback.xml详解目前找到的最详细且讲得最明白的文章,学习logback的话首推这边文章。就是错别字有点多,排版也有点乱,但仍为一篇优秀的文章logback的使用和logback.xml详解(校对)这篇文章对上文的一些错别字进行修改,且补充了过滤器<filter>的内容,单排版依然乱
2020-09-10 16:28:46
154
原创 解决The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized or represents more than one time zone问题
问题描述数据库配置如下spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull username: yeyuanxinyi password: 12.
2020-08-28 16:23:58
2635
原创 解决Spring Boot数据库多数据源配置报jdbcUrl is required with driverClassName错误
原来的单数据源配置如下spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://192.168.0.1:3306/mydb?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2B8 username: yeyu
2020-08-28 13:48:20
688
原创 Spring Boot 解决同名类导致的bean名冲突bean name conflicts
问题描述项目中有两个同名类都叫MyService,只是放在不同的包名下package com.yeyuanxinyi;@Service()public class MyService {}package com.yeyuanxiner;@Service()public class MyService {}当项目启动的时候会报如下错误Caused by: org.springframework.context.annotation.ConflictingBeanDef
2020-08-28 11:10:19
7759
原创 Android解决Project needs to be converted to androidx.* dependencies问题
问题描述Android Studio升级到3.5版本后,在原来的老项目上新建module的时候却提示Project needs to be converted to androidx.* dependencies,如下图所示,Finish按钮灰色无法点击解决办法1.打开项目的gradle.properties文件,添加如下配置,然后点右上角的Sync Nowandroid.useAndroidX=trueandroid.enableJetifier=true2.然后再创建mo..
2020-08-28 09:22:58
986
原创 IntelliJ IDEA中Maven项目Skip Tests跳过测试
IntelliJ IDEA的Maven项目有时候通过右边Maven Projects面板的package或者install命令打包的时候,会报错导致打包失败,这是由于这两个命令打包前默认会运行tests测试,若测试失败则打包失败。但是有时候我们打包的时候一些项目配置是针对生产环境的,在本地可能会测试失败,在正式环境是可以正常运行的,这时候我们就需要把打包前的测试禁止调IntelliJ IDEA跳过测试展开左侧Maven Projects面板,顶部有一个Toggle 'Skip Tests' Mode
2020-08-27 16:53:04
5633
原创 IntelliJ IDEA设置Maven国内阿里镜像
国内网络环境访问Maven速度真是慢得让人抓狂,即使打开VPN也无济于事,每当第一次打开项目的时候,要下载一堆的包,有时候一个小时都下载不下来。我们可以通过设置国内的Maven镜像来提高访问速度1.右键项目,选择Maven->Open 'Settings.xml'(第一次创建的话是Create ‘Settings.xml’)2.在打开的文件中复制黏贴以下配置内容,该配置配置了阿里的Maven镜像Settings.xml文件默认存放在C:\Users\Administrator\.m2\
2020-08-25 11:01:52
1982
原创 Spring boot CommandLineRunner启动任务传参
在《Spring boot 通过CommandLineRunner 在启动完成后执行任务》这篇文章中我们介绍了创建CommandLineRunner任务,在Spring boot启动后执行一些任务。有人可能有以为,这run(String... args)方法中的args参数是什么?@Component@Order(value = 1) // 指定其执行顺序,值越小优先级越高public class MyRunner1 implements CommandLineRunner { @Ov
2020-08-21 16:39:43
1688
原创 Spring boot 通过ApplicationRunner在启动完成后执行任务
我们经常会有这样的需求,在Spring boot项目启动后需要马上执行一些任务,比如初始化的任务实现的方法有很多中,今天我们介绍的是通过ApplicationRunner来实现实现ApplicationRunner接口,然后添加@Component注解 然后在run方法中实现具体要运行的任务 如果有多个任务且有先后执行顺序,可用@Order注解,value值越小优先级越高创建如下两个简单的任务,跑起来看看@Component@Order(value = 1) // 指定其执行顺序,值越
2020-08-21 15:44:46
3673
1
原创 Spring boot 通过CommandLineRunner 在启动完成后执行任务
我们经常会有这样的需求,在Spring boot项目启动后需要马上执行一些任务,比如初始化的任务实现的方法有很多中,今天我们介绍的是通过CommandLineRunner来实现实现CommandLineRunner接口,然后添加@Component注解 然后在run方法中实现具体要运行的任务 如果有多个任务且有先后执行顺序,可用@Order注解,value值越小优先级越高创建如下两个简单的任务,跑起来看看@Component@Order(value = 1) // 指定其执行顺序,值越
2020-08-21 15:34:52
946
1
原创 关于纯洁的微笑《Spring Boot(七):Mybatis 多数据源最简解决方案》文章补充说明多数据源事务的配置
关于Spring boot中使用Mybatis多数据源的配置,我推荐纯洁的微笑博主的《Spring Boot(七):Mybatis 多数据源最简解决方案》这篇文章,简单清晰易懂疑问但是有个疑问就是在DataSource1Config配置注入的数据库事务管理类DataSourceTransactionManager对象test1TransactionManager在后文中却没有使用到,照理说有改有个地方配置使用该对象,使不同的操作对应回滚不同的数据库@Configuration@MapperS
2020-08-21 14:11:38
239
原创 Spring Boot Mybatis数据库datasource多数据源配置
application.yaml文件配置spring: datasource: db1: driver-class-name: com.mysql.cj.jdbc.Driver jdbc-url: jdbc:mysql://192.168.0.1:3306/ellassay_dev?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serve.
2020-08-21 13:40:10
1459
MySQL java驱动包mysql-connector-java-5.1.45
2019-04-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人