HashMap 实现原理分析 HashMap 又叫 Hash 表或散列表,是基于哈希表的 Map 接口实现。此实现提供了基于 Key-Value 映射结构数据的所有可选操作,如:增、删、改、查等。HashMap 并不保证映射顺序,特别是它不保证插入顺序恒久不变(后文会说明为什么)。1 到底“哈希表”、“散列表”是个什么东西?HashMap 本质上是“基于哈希表的 Map 接口实现”,Map 接口的实现好理解,但“哈希表”或...
setVisibility(View.GONE)无效的解决方案 原因:一般出现这种情况都是为View设置了动画,并且调用了setFillAfter(true)方法设置动画结束后停留在结束位置。解决方案:可以在setVisibility()之前调用clearAnimation()方法清除掉动画,或setFillAfter(false)(时间上该函数内部也调用了clearAnimation())。
Android 解决ScrollView与父视图滑动冲突问题 最近在解决一个比较棘手的问题,就是ScrollView与父视图之间滑动冲突的问题。这里所说的滑动冲突,是指包裹ScrollView的父视图本身就是一个可以滑动的组件,比如说ScrollView嵌套ScrollView的情况(当然,这在实际应用中是没有意义的,因为ScrollView只能包含一个子组件,这里只是举一个栗子)。问题定义说要解决这样一个问题,肯定会有点摸不到头脑,但我们可以用分解法,来“大
Android 调用系统图片裁剪(解决“无法加载。”问题) Android 调用系统图片裁剪(解决“无法加载。”问题)由于Android屏幕尺寸碎片化的问题太过严重,因此很多app在上传图片之前都会将图片剪切成自己想要的尺寸。由于需求很大,Android官方也给出了系统自带的图片裁剪app,我们可以在程序中很方便地调用到。1.调用裁剪工具if(null != uri) { Intent intent = new Intent(); /*设置调
Android ContentObserver 监听图库变化 相比FileObserver的繁琐,ContentObserver在易用性上还是要优秀一些的,因此我们可以在有监听需求的时候选用一下,一个功能多一种实现方式,就多了一个比较嘛。关于ContentObserverContentObserver顾名思义,就是内容观察器的意思,跟FileObserver很像,只不过前者是监听数据库的变化。实现步骤这里我们就拿图库监听做一个例子: 在做之前先给出图库相对的
android FileObserver的用法与避坑指南 昨天因为项目需要,需要做一个damo,用到了文件监听的功能,所以就使用了FileObserver(文件观察器)这个类,结果就被坑的不行不行的,昨天下班已经身心俱疲,本着跟bug呲牙必报的精神,这里要将这笔账记下,也希望大家以后不会在这上面浪费时间。FileObserver的功能故名思议,就是监听文件的事件啦,根据官方给出的文档,有以下几种事件的响应,对应不同的事件常量。 常量名 对应事件
解决Android studio无法更新sdk的方法2 最近重装了系统,发现以前通过修改hosts文件来更新sdk的方法已经不能用了,于是弄了一天,试了各种方法,找到正确解决方法的时候差点被自己蠢哭。 正所谓“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”。上次的解决方法在最后分享了一个国内的Android studio社区,我平时都在上面下载资源,这次的解决方法就在这个网站中。 先上链接,Android Studio中文社区。思路在试了各种翻墙工具
xFermode的原理及使用 xFermode是画笔的一个属性,有点类似于PS中的图层,有一个底层图层,和一个顶层图层,通过两个图层叠放层次的不同,可以做出很多好玩的效果。谷歌官方的apidemo中生成了两个图层的各种叠放次序效果:是不是有点摸不着头脑,让我们列个表格来解释一下吧: 属性名 属性常量 属性说明 Clear PorterDuff.Mode.CLEAR 所有的图层都不会在画布上展示 Src
Immutable bitmap passed to Canvas constructor 异常 异常背景:这是一个在使用BitmapFactory.decodeResource(Resources res, int id)函数创建bitmap时经常会遇到的问题;异常原因:发生这个异常是由于android不允许直接对drawable目录中的图片进行修改的,而直接通过该函数创建出来的Bitmap对象,具有直接修改图片资源的能力。只能通过拷贝一个id参数所对应图片资源的副本来创建Bitmap。解决办
Android UI之GridLayout(网格布局) 说明:网格布局是4.0之后添加的布局,跟TableLayout有点像,但更加好用,它把容器分为一个rows*columns的网格,每个网格都是一个组件位,可是通过设置让组件位占据多行/列。 与之相似地,还有一个叫做GridView的组件,无论功能和名称都很相似,不过GridView使用Adapter来填充组件位,GridLayout则要简化得多。 按照CSDN博主studyboyjlu4(博客地
Android UI之RelativeLayout(相对布局) 说明:RealtiveLayout是目前android开发中最最常用的布局管理器(比LinearLayout还常用),布局内的子组件的位置总是相互依照其他子组件和RealtiveLayout布局本身来确定的。这样最大的好处就是更加自由灵活,可以设计出更加炫酷复杂的界面,而且可以在IDE中通过直接拖拽来进行界面的布局设计。 注意:RealtiveLayout的子组件不可以设置android:layo
Android UI之FrameLayout(帧布局) Android UI之FrameLayout(帧布局)说明:帧布局会为每个包含其中的组件开辟一个空白区域(称为帧),这些帧是一层层叠加在一起的,有点类似于一层层覆盖贴上去的海报,后面的组件会把前面的组件覆盖住。FrameLayout有两个比较特殊的常用属性需要注意:1 android:foreground对应方法:setForeground(Drawable) 说明:设置帧布局的前景图像,一般为布
Android UI之TableLayout(表格布局) Android UI之TableLayout(表格布局)说明:表格布局采用常见的表格方式来表示布局,与上文中提到的android:weight属性显示出来的效果有些相似。而事实上,TableLayout的确是LinearLayout的子类,因此本质上还是线性布局。实际开发中,我们经常会采用adnroid:weight属性来代替表格布局。 跟在html中写表格有点类似,在TableLayout中,我
Android UI之LinearLayout(线性布局) 说明:线性布局是最常用的布局,其包含的所有View会按照线性来排列。 需要注意的就是四个比较常用的xml属性:1 android:gravity对应方法:setGravity(int) 说明:这个属性设置布局内组件的对齐方式,支持以下属性值: 属性值 作用 top 将对象放在其容器的顶部,不改变其大小 bottom 将对象放在其容器的底部,不改变其大小 left 将
通过hover修改其他元素 hover,我们都知道,是监听组件“悬停状态”的一个伪类。我们一般通过hover来修改组件的背景什么的,很少涉及到太复杂的操作。也就是说我们一般只是对加了hover伪类的元素自身的样式进行改变,比如这样:<form name="register" method="post" > 姓名 :<input type="text" name