17 bdmh(vx: memghui001)

尚未进行身份认证

多年从事软件开发工作,现在主要从事移动端应用开发

等级
TA的排名 5k+

Android:ArrowKeyMovementMethod

我们之前在Android:MovementMethod,BaseMovementMethod和Android:LinkMovementMethod、ScrollingMovementMethod两篇文章中讲过TextView的两种MovementMethod的工作过程,这两种都是针对TextView而言的,那么对应可选择文本或者EditText,还有一种MovementMethod,那就是Arro...

2020-04-09 13:58:49

Java:通过字节码看if-else和switch-case

条件语句是我们使用非常频繁的语法之一,其中if-else和switch-case最为常用,那很多同学也会有疑惑,这两种方式有什么区别,哪个效率更高一些呢。接下来我们就从字节码的角度,看看这两种方法的实现。先来看看if-else。public void foo(int i) { if (i == 1) System.out.println(1); else ...

2020-03-26 11:18:20

Android:解读TextView的DynamicLayout

在《Android:TextView的Layout创建过程》中我们提到过,TextView中有三种Layout,我们已经讲了两种,今天我们就来说说第三种,动态布局DynamicLayout。我们平时使用的带链接的、ClickSpan等带样式的TextView,都会默认由这种布局进行处理。下面我们定义一个带链接的TextView。 <TextView android...

2020-03-25 10:26:26

Android:解读TextView的StaticLayout

StaticLayout用于布局之后,不会再进行编辑的文本。Android:TextView的Layout创建过程中提到过Layout创建的过程,所以这里直接从TextView的makeSingleLayout开始。当判断不满足DynamicLayout和BoringLayout之后,就会开始StaticLayout的创建。我们在布局中对TextView进行如下设置:手机屏幕密度为4。...

2020-03-17 11:11:42

Android:解读TextView的BoringLayout

A BoringLayout is a very simple Layout implementation for text that fits on a single line and is all left-to-right characters. You will probably never want to make one of these yourself; if you do, b...

2020-03-12 16:48:45

Android:TextView的Layout创建过程

TextView组件,使用频率非常高,虽然使用起来比较简单,但是它的实现其实是一个复杂的过程。它对文字的管理是通过Layout实现的。TextView内部会根据不同的设置,创建不同的Layout,总共有三种。DynamicLayout:用在EditText或者TextView中设置的是Spannable类型的文字(比如ClickSpan,URL等)。BoringLayout:常用在处理单行...

2020-03-10 11:25:21

Android:TextView的AutoSizeText实现过程

在实际开发中,我们经常会遇到,TextView区域固定,但字数不确定,又希望把文字信息都展示出来,IOS中可以轻松实现,但在Android上好想并没有这种实现。从8.0(API26)开始,TextView组件提供了autoSizeTextType、autoSizeMinTextSize、autoSizeMaxTextSize等相关属性,来满足这个需求,在8.0以前的版本,可以通过com.and...

2020-03-06 12:32:07

Android:看看Google工程师的手误

我们启动Activity,都会用到Intent,Intent需要传入Context参数,通常我们在Activity中使用Intent时,都会传入Activity的实例作为Context。但由于考虑到内存泄漏的风险,大都提倡使用ApplicationContext,所以很多同学就把Activity类型的Context换成了ApplicationContext,这时就发现,突然不能正常启动Activi...

2020-03-04 15:49:58

Serializable是怎么工作的(反序列化)

在《Serializable是怎么工作的(写入)》篇文章中,我们大致了解了Serializable的写入过程,我们用到的是ObjectOutputStream,那与之对应的就是反序列化,把存入文件的二进制数据,读出来,转换为对应的实例对象,这次就该用到ObjectInputStream了。使用代码大致如下:TesyBean sBean = new TesyBean();String pat...

2020-03-03 10:15:03

Serializable是怎么工作的(写入)

Serializable是Java提供的数据序列号接口,只要你的Bean继承自Serializable接口,那么就可以被序列化保存到介质中或者进行数据的传输。当我们查看Serializable的代码时,就会发现,里面什么都没有,那Java是如何处理继承了Serializable接口的数据呢?public interface Serializable {}既然Serializable...

2020-03-02 13:47:17

String的比较,你都搞清楚了吗

String这个使用频率极高的数据类型,每个人都能说出很多关于它的使用情景。因为String相对于int等基本类型的内在差别,也常被面试官拿来拿捏面试者。不过确实,虽然我们每天声明无数次String对象,但是对于它的那些事,还是既熟悉又陌生,有点最熟悉的陌生人的感觉。所以今天汇总一下String的常见问题,诸如比较不同形式创建方法创建的对象、不同方法创建了几个对象等问题,结合字节码、源码及分析工具...

2020-02-28 12:42:14

从源码看int和Integer的面试题

int是一种基本数据类型,Integer是一个对象,需要实例化才能使用。它对int进行了包装,在Integer内部有一个对应的数值int变量。private final int value;int和Integer的对比,经常被拿来作为面试题,下面就多种情况,通过源码分析其结果。我们将比较“==”和Equals两种结果。第一种情况:Integer i1 = new Integer(...

2020-02-25 10:13:05

Android:LinkMovementMethod、ScrollingMovementMethod

再上一篇文章《MovementMethod,BaseMovementMethod》中我们讲了Movement的基类,这里我们讲一下它的子类LinkMovementMethod和ScrollingMovementMethod,为什么把它俩放到一起呢?因为LinkMovementMethod继承自ScrollingMovementMethod。先来看ScrollingMovementMethod。...

2020-02-21 11:34:23

Android:MovementMethod,BaseMovementMethod

我们在使用TextView,EditText等组件时,可以会有光标的显示,可以选择文本,拖动轨迹球,滚动,长按弹出菜单等操作,这些都是MovementMethod的作用。MovementMethod是一个接口,提供了光标的位置、滚动以及文本的选择等操作。它会处理按键及Touch等操作。这个接口仅供系统调用。先来看看这个接口里面有哪些方法。//这里做一些初始化的工作public vo...

2020-02-11 14:57:32

Andorid:版本不匹配导致的Installation failed due to invalid APK file

最近将Gradle升级,新建项目,并在模拟器中运行,没想到出现了无法安装的错误。Installation failed due to invalid APK file查看LogCat日志,有Couldn't load memtrack module的错误提示。模拟题是 8.0-API-26,gradle的配制是 compileSdkVersion 28 buildT...

2020-02-01 11:14:43

Android:Parcelable序列化读写过程(Parcel)

Parcelable是为Android量身定制的序列化接口,底层是C的实现,通过内存来操作数据。Android中通过Binder机制传递Parcelable数据。Parcelable是一个接口,需要序列化的对象必须实现这个接口。而具体负责数据组装的是Parcel类。接下来,我们就以Activity间通过Intent传递序列化对象,来看看Parcel的工作过程。整个流程涉及到Activity...

2020-01-14 10:31:04

Java:源码分析—反射(Method、Field)

在上一篇文章Java:源码分析—反射(实例化对象:newInstance)中我们了解了反射进行对象实例化的过程,既然对象有了,我们就要使用它,对于一个对象,我们最常用的就是方法和属性里,所以这一篇我们就来看看反射中的Method和Field。在Class.java文件的代码中,比较常用的关于方法和属性的是getMethods、getDeclaredMethods、getFields、getDe...

2020-01-09 09:54:17

Java:源码分析—反射(实例化对象:newInstance)

今天我们来通过源代码,看看Java中反射是如何工作的。反射,其实在我们日常的编程过程中可能用的并不多,但是第三方的库,这个技术确实应用非常广泛的,包括我们在开发Android应用时,有时为了操作一些不开放的系统属性时,也会用到反射。这里我们将通过分析反射的运行,来看看Class这个类的功能。开始之前,先提到两个静态的整型变量,在java.lang.reflect.Member中。这两个变量...

2020-01-08 13:45:15

“+”真的可以替代StringBuilder吗

最近在头条上看到一篇帖子,说Java8开始,字符串拼接时,“+”会被编译成StringBuilder,所以,字符串的连接操作不用再考虑效率问题了,事实真的是这样吗?要搞明白,还是要看看Java编译后的字节码。先比较这样两段代码。最简单的字符串拼接,一个用“+”,一个用StringBuilder。 public void useOperator(){ String a...

2020-01-03 08:31:05

Android:Volley框架分析(十)—— Cache的运转步骤

在上一节,Cache的主要方法分析完后,我们就看看Volley是如何使用Cache的。1、开启Cache选项request.setShouldCache(true);2、添加Request到队列,Volley先判断是否使用缓存,使用就添加到缓存队列,不使用就添加到工作队列(RequestQueue.class) public <T> Request<T&...

2019-12-30 10:19:07

查看更多

CSDN身份
  • 论坛版主
  • 博客专家
勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 学习力
    学习力
    《原力计划【第二季】》第一期主题勋章 ,第一期活动已经结束啦,小伙伴们可以去参加第二期打卡挑战活动获取更多勋章哦。
  • 红花
    红花
    子板块内专家分月排名榜第一
  • 黄花
    黄花
    子板块内专家分月排名榜第二
  • 蓝花
    蓝花
    子板块内专家分月排名榜第三
  • 金牌
    金牌
    总榜技术专家分月排行榜第一
  • 银牌
    银牌
    总榜技术专家分月排行榜第二
  • 铜牌
    铜牌
    总榜技术专家分月排行榜第三
  • 状元
    状元
    总榜技术专家分年内排名榜第一
  • 进士
    进士
    总榜技术专家分年内排名榜第四
  • 名人
    名人
    名人称号
  • 优秀版主
    优秀版主
    优秀小版主