- 博客(20)
- 收藏
- 关注
原创 Android 文字带拼音
这个自定义View可以实现文字带拼音,根据当前VIew长度自动换行,实现一句带拼音文本的多行显示,如果是诗词或者其他多段落场景,可以结合RecyclerView,此View作为一个Item显示一句文本。
2025-03-28 20:50:35
156
原创 Android进阶之RecyclerView原理
四、一些优化点本文默认你已掌握RecyclerView的基本使用,结合主流文章及自己的理解讲解下RecyclerView原理及它的一些优化点,非纯搬运。
2025-03-06 15:52:17
714
原创 Android研发小技巧(一)
工作中在使用Kotlin和日常工作总结了一些小技巧点,不定期更新,这里记录下。11、Fragment获取AcitivityViewModel。5、RecyclerView适配器的简单写法。1、根据上下文获取Lifecycle对象。6、自定义View的简单写法。14、进一步查看错误信息。7、修改项目的git地址。9、AndroidX升级。10、强制使用依赖库。
2025-03-04 14:28:23
177
原创 Android由简到深之Handler
,如果没有消息处理的时候,next()方法就会阻塞在这里,而阻塞却没有导致当前线程ANR的原因,是因为native的nativePoolOnce方法时候,调用了linux低层,使当前线程腾出CPU的使用权,处于休眠等待状态,直到休眠时间结束或消息入队被唤醒。首先我们要知道,在我们持有一个handler的时候,我们的post,postDelay,发送的事件,Handler是不会立刻响应的,它们会在一个队列里,Handler会不断取出我们发送的事件,一个个处理,那么我们再来看,这个流程涉及到了哪些类。
2025-03-04 14:11:03
769
原创 Android 弹窗弹出时隐藏底部导航栏
原理为弹窗设置不可获取焦点,在弹窗弹出后去除不可获取焦点标签,使弹出可以点击额外区域取消,且不会发生点击穿透,然后兼容部分机型,在弹出后调用hideNavigationBar隐藏状态栏。使用方法是在Dialog或者FragmentDialog的onCreate方法中直接调用initHideNavigationBarConfig()即可。我们在设备使用虚拟键导航时,弹窗弹出会调起底部导航栏导致抖动一下,原因是因为Dialog获取到了焦点导致导航栏被唤起。基于Kotlin的扩展方法,这里写一个工具类。
2024-03-19 16:09:06
933
原创 Android常见面试问题及其答案
思考:我们上面已经知道String是指向常量池的,它的值是不可变的,变更时其实是使用了StringBuilder进行拼接,再将拼接后的值在常量池中的地址指向给String,StringBuilder和StringBuffer的区别是前者线程不安全,效率高,后者线程安全。思考:String不可变的代码层原因是它的本质是一个设置为final的byte数组,内容不可变更,设计上是基于稳定考虑,毕竟不可变的对象是原子性的,线程安全的,避免了变化引起的问题。String b = "he"+"llo" (常量池)
2023-10-30 17:14:59
167
原创 安卓 synchronized(this)和synchronized(object)区别
synchronized(object)在多线程调用当前对象时,只阻塞同一个object对象的方法,而不是阻塞所有的synchronized方法,使用起来更加灵活。synchronized(this)在多线程调用this这个对象时,锁粒度比较大,它会将所有synchronized方法都阻塞。简单的线程锁一般有两种写法,它们本质上的区别是。
2023-07-31 17:39:04
198
原创 Android 抽屉组件DrawerLayout的简单使用
对于点击屏幕上按钮,从屏幕外上下左右划出一个菜单的场景,Android原生的DrawerLayout简单实用,这里记录一下<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/home_drawer_lay
2022-05-20 14:22:43
2387
原创 Android 23种设计模式:(零)面向对象的六大原则
设计模式是安卓最重要的进阶知识之一,好的代码结构必定由各种设计模式组成,而学习设计模式之前,我们要了解面向对象的六大原则六大原则是设计模式的基础理念,这里只需要理解记忆,学习完所有的设计模式后,再回来看六大原则,应该能有很大的收获1、单一职责原则单一原则很简单,就是将一组相关性很高的函数、数据封装到一个类中,每个方法的职责单一这个原则是最简单,也是最难的一点,因为方法职责单一的界定,一般需要开发者自己的经验来判断举例说明class A{ // 执行第一步 pri..
2021-10-29 17:01:21
1113
原创 Android Studio无法手动设置NDK路径问题
点击File->Project Structure后,打开的这个界面无法配置NDK localtion解决方式是直接在local.properties中配置ndk路径
2021-10-29 10:50:42
4575
3
原创 Android WebSocket原理及实战(二)
上期原理篇我们讲到了WebSocket和HTTP的区别及其优缺点,这期主要是实战部分,大多数Android项目不需要使用第三方重量级的WebSocket框架,所以我以OKHttp3.0自带的WebSocket为例,来进行讲解添加依赖implementation "com.squareup.okhttp3:okhttp:4.9.0"实现步骤 构建OkHttpClient配置初始化一些参数。 使用WebSocket的Url地址连接。 设置WebSocket的连接状态回..
2021-10-28 18:26:42
3580
4
原创 Android WebSocket原理及实战(一)
近来封装了一个基于WebSocket服务的库,过程中对WebSocket进行了总结,分几个章节进行讲解,看完后,应该能够对以下内容有个简单的了解1、WebSocket原理2、WebSocket与Http的区别3、为什么要使用WebSocket4、Android端WebSocket实战下面开始WebSocket伴随HTML5协议横空出世,这里的HTML5指的是一系列新规范,新技术,那么在HTML5之前,为什么没有WebSocket,而现在WebSocket的加入,又是为了解决什么问题呢
2021-10-28 16:32:32
3831
原创 解决OpenCv 图像倾斜90度或者倒立的问题
最近在做人脸识别,刚刚把OpenCvSDK环境配置好,就发现预览时的图像惨不忍睹,前置斜着,后置也有问题,所以做了些修改,解决了前置和后置各自的角度问题直接搜索CameraBridgeViewBase这个类,替换成下面的代码 public abstract class CameraBridgeViewBase extends SurfaceView implements Surfac...
2018-08-31 11:16:46
1988
1
原创 Android Tv 焦点移动特效项目学习经验1
1. android:clipChildren的意思:是否限制子View在其范围内参考文章 http://blog.youkuaiyun.com/flymoon1201/article/details/446464732. android:clipToPadding 设置绘制区域是否不包括padding,常用于解决ImageView设置padding属性无效等问题参考文章 http://blog.
2017-10-09 16:56:01
304
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人