Android基础
xingfeng_coder
路漫漫其修远兮,吾将上下而求索
Gitbook地址:https://xingfeng.gitbook.io/hust
简书地址:https://www.jianshu.com/u/57f41372c68e
展开
-
闲话元注解@Retention
元注解@Retention元注解是用来描述注解的。@Retention用来描述注解将会在哪个层次存在,有三个值:RetentionPolicy.SOURCE:只会在java文件中存在,class文件中就不可见了。可以被编译器使用RetentionPolicy.CLASS:会在class中可见,不需要被虚拟机加载。编译时可见RetentionPolicy.RUNTIME:在class中可见...原创 2020-01-04 11:41:18 · 825 阅读 · 0 评论 -
ArrayMap数据结构分析
ArrayMap是Android上特有的一个性能比较高的Map,和HashMap一样,也实现了Map接口。这里只分析其数据结构部分,不分析其高效缓存部分。分析ArrayMap的结构是int[] mHashes,记录每个key的hash值;Object[] mArray记录Key和Value,对于每一组Key和Value,按照Key和Value的顺序排列。put(K,V)时,首先根据K计算出...原创 2019-12-29 12:01:18 · 2365 阅读 · 1 评论 -
Android开发——Snackbar使用详解
Snackbar是Android支持库中用于显示简单消息并且提供和用户的一个简单操作的一种弹出式提醒。当使用Snackbar时,提示会出现在消息最底部,通常含有一段信息和一个可点击的按钮。下图是Gmail中删除一封邮件时弹出的Snackbar: 在上图中,最下方的黑色区域,包含左边文字和右边”撤销”字样的就是Snackbar。Snackbar在显示一段时间后就会自动消失。同样作为消息提示,Sn原创 2016-10-19 19:22:48 · 35735 阅读 · 6 评论 -
EventBus源码分析之订阅-发布模型
EventBus事件总线模式如下图: 本文主要从两个方面介绍源码: 1. 订阅者是如何注册到事件中心的; 2. 发布者发布了事件之后,事件中心是如何将事件调用到合适的订阅方法的。 订阅者注册到事件中心订阅者注册到事件中心需要调用如下代码: EventBus.gtetDefault().register(this)订阅者可以是任何对象,唯一的要求是内部有@Subs...原创 2018-07-26 20:00:38 · 636 阅读 · 0 评论 -
APK重命名插件
Android打包流程的结果是一个apk文件,而apk的命名默认使用的是(module-name)+(build-varints)+(build-type).apk,是不是经常能见到app-debug.apk,这是因为使用AS新建一个项目时,默认module名是app,然后直接使用as的run工具,其实执行的assembleDebug命令再加安装。这就是app-debug.apk的由来。 本文将...原创 2018-09-06 21:55:07 · 4567 阅读 · 1 评论 -
自定义Material点击效果的View
最近在做项目的时候,遇到一个需求,需要自定义一个View;写到布局文件里面,希望也有Material的波纹点击效果,需要怎么弄呢??attr/selectableItemBackground将该View的background属性设为标题的样式即可,这样在5.0以上就有了波纹效果,在5.0以上就是selector的效果。这样设置了后,就有了系统默认的效果。实验其实,现在写个Button,默...原创 2018-09-24 09:01:11 · 764 阅读 · 0 评论 -
ConstraintLayout使用说明
刚学Android那会,Android是有五大布局的:FrameLayout、LinearLayout、RelativeLayout、AbsouteLayout、TableLayout。现在为止,Android的布局家族得到了扩充,现在在公司做项目使用的最多的是ConstraintLayout,之前接触的比较少,因此趁着周末时间,好好学习了一下,功能非常nb,不愧是Android Studio默认...原创 2018-11-03 16:06:18 · 1814 阅读 · 0 评论 -
TabLayout使用指南
TabLayout是开发中经常使用到的控件,经常与ViewPager一起配合使用,一组tab,可以点击、可以滚动。这不,我们的app中也是用到了这个控件,之前对这个控件只停留在最基本的用法,因此开发时也去查了些资料,趁着周末,就系统地再学习一下。基本操作使用之前,首先需要在gradle文件中加入design库, implementation 'com.android.support:d...原创 2018-11-17 14:28:48 · 2481 阅读 · 0 评论 -
AppBarLayout学习
AppBarLayout是一个垂直的LinearLayout,实现了很多和协调布局一起合作的滚动属性。其子View可以通过setScrollFlags()或在xml布局中通过app:layout_scrollFlags属性设置想要的滚动行为。AppBarLayout很多行为依赖于CoordinatorLayout。如果你使用别的ViewGroup装AppBarLyout,很多功能就没有了。Ap...原创 2018-12-03 09:50:15 · 2083 阅读 · 0 评论 -
美化你的APP——从Toolbar开始
Toolbar是什么Toolbar是Google在Android 5.0中推出的一款替代ActionBar的View。ActionBar必须得作为Activity内容的一部分,而Toolbar可以放在任何层次。Toolbar比ActionBar支持更多的功能,从开始到终点,Toolbar包含下面可选的元素: - 一个导航按钮。 可以是一个向前的按钮、导航菜单按钮,等等。 - 一个logo图片原创 2017-04-10 09:39:04 · 25438 阅读 · 0 评论 -
深入理解Activity——生命周期、启动模式、taskAffinity
基本用法startActivity startActivityForResult+onActivityResult 生命周期 - Activity的整个生命周期发生在onCreate()调用与onDestory()调用之间。 - Activity的可见生命周期发生在onStart()调用与onStop()之间。在这段时间,用户可以在屏幕上看到Activity并与其交互。在Activit原创 2017-03-09 09:21:38 · 1806 阅读 · 2 评论 -
深入理解Service(一)——服务生命周期
Service与Activity一样,是Android的四大组件之一。Activity是看得见的,而Service则是看不见的。看得见的Activity一般承担显示界面、控制的功能,而Service则承担后台任务。而Service与线程的区别在于,Service是Android的四大组件之一,所以系统不会轻易将其kill。服务可有其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。原创 2016-12-21 14:52:58 · 12729 阅读 · 0 评论 -
TextView显示丰富多彩的文字(三)——自定义CharacterStyle和ParagraphStyle显示效果
在TextView显示丰富多彩的文字(一)——如何使用CharacterStyle格式化字符和TextView显示丰富多彩的文字(二)——如何使用ParagraphStyle格式化段落中,知道了如何格式化文本,给文本中的某一范围设置样式,比如前景、背景、图片等;或者给整个段落设置格式,比如BulletSpan、QuoteSpan等。不了解的朋友可以先去看一下。在这篇博客中,我们将自定义我们自己的格式原创 2016-09-11 14:28:54 · 3159 阅读 · 0 评论 -
android WebView拦截请求详解
1 WebView基本用法WebView的基本用法相信大多数android开发者都是会使用的,最简单的就是调用个loadUrl方法,但是记得要在清单文件中添加网络权限。我也简单了写了一个加载百度的,如下图 代码如是: mWebview = (WebView) findViewById(R.id.my_webview); mWebview.setWebViewClient(new WebVie原创 2016-08-29 11:21:09 · 27995 阅读 · 6 评论 -
TextView显示丰富多彩的文字(一)——如何使用CharacterStyle格式化字符
TextView是用于文字的控件,一般可以在布局文件中设置text属性或者在代码中使用setText()方法。但如果想做到格式化文字,比如像网页中将其中的URL、手机号码等等显示不同颜色,并且设置点击事件,可以直接跳转到浏览器或者电话,该如何实现呢?本篇博客重点介绍这些应该如何实现。使用autoLink属性TextView的autoLink属性用于控制文本中的URL、Email地址等是否自动被发现并原创 2016-09-04 15:30:13 · 3202 阅读 · 0 评论 -
DownloadManager使用详解
一、概述DownloadManager是处理长时间HTTP下载的系统服务。客户端可以将指定内容下载到某一特定的目录。DownloadManager会在后台进行下载工作,自己会处理下载失败、网络变换或系统重启等问题。可以通过下面的方法获取到DownloadManager对象,代码如下: DownloadManager mDownloadManager = (DownloadManager) getSy原创 2016-10-12 16:19:43 · 19756 阅读 · 8 评论 -
使用camera2构建相机应用
在Andrioid 5.0之前如果要自己创建相机应用,那么需要使用android.hardware.Camera类,但是在Android 5.0中引入了android.hardware.camera2包用于替代原有的类构建相机应用。本文主要讲述利用camera2包构建应用,如果想了解在Android 5.0之前构建应用的话,可以到官网文档查看。 一、android.hardware.camera2原创 2016-10-06 15:41:35 · 4330 阅读 · 2 评论 -
TextView显示丰富多彩的文字(四)——从源码角度解释格式化显示的原理
LayoutLayout是一个抽象类,负责管理文字布局。Layout有三个实现类:BoringLayout、StaticLayout、DynamicLayout。BoringLayout布局用于显示一行文字并且字符从左至右。StaticLayout用于文字布局之后不会再改变。DynamicLayout用于文本编辑时可以自己更新显示效果。并且这三个类均说明了最好不要直接使用这些类,除非你想实现自己显示原创 2016-09-18 20:37:22 · 3669 阅读 · 0 评论 -
深入理解Service(三)——前台服务和IntentService
在深入理解Service(一)——服务生命周期中解释了Service的生命周期,在深入理解Service(二)——绑定服务中解释了如何绑定服务,IPC机制,在本篇博客中将谈论服务的另两个常见用法:前台服务和IntentService。 在前台运行服务我们之前定义的服务都是运行在后台的,这样的服务当系统内存不足时将会被杀死,而用户却毫不知情。如果想要一个服务的状态可以被用户一眼看到,那么可以使用前台原创 2017-01-04 09:14:29 · 3533 阅读 · 0 评论 -
深入理解Service(二)——绑定服务
在上一篇博客深入理解Service(一)——服务生命周期中了解了Service会有启动和绑定两种状态,对应着这两种状态会有不同的生命周期:开启服务与停止服务的方式均有所不同。这篇博客主要介绍绑定服务相关的内容,以及如果服务与调用者,比如Activity处于不同进程时该如何操作,即通常意义上所说的IPC。 绑定服务的实现什么时候需要使用绑定服务呢?我的理解是调用者在启动完服务后,还需要以后与服务打交原创 2016-12-28 09:25:56 · 5048 阅读 · 1 评论 -
TextView显示丰富多彩的文字(二)——如何使用ParagraphStyle格式化段落
在上一篇博客TextView显示丰富多彩的文字(一)——在字符级别改变中介绍了CharacterStyle的接口,并使用了Character的多个实现类介绍了一下文字改变效果。下面是Spannable的setSpan的API: 其中可以看到第一个参数不止可以是CharacterStyle,还可以使ParagraphStyle、TextWatecher和SpanWatcher的子类。今天这篇博客主要原创 2016-09-10 15:06:20 · 4315 阅读 · 3 评论