每天一点小知识【9】

继续总结本司机在工作过程中涉及到的一些小知识点或小的技巧,其中有代码片段,也有知识点,经验总结和分享。

1、图文混排。

将SpannableString和ImageSpan 结合起来使用可以实现图文混排,具体方法如下所示:

//得到drawable对象

Drawable drawable = getResources().getDrawable(R.drawable.id); 

//drawable设置边界

drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); 

//需要处理的文本,[replace]是需要被替代的文本 

SpannableString spannable = new SpannableString(getText().toString()+"[replace]"); 

 //要让图片替代指定的文字必须使用ImageSpan 

ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE); 

 //开始替换,注意第2和第3个参数表示从哪里开始替换到哪里替换结束(start和end) 

 //最后一个参数SPAN_INCLUSIVE_EXCLUSIVE类似数学中的集合,[3,10)表示从3到10,包括3但不包括10 

spannable.setSpan(span, getText().length(), getText().length()+"[replace]".length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);   

setText(spannable);

2、自定义Dialog的style的理解。

在写自定义Dialog时,往往需要重新定义新的style,我们对常用的style属性,说明一下。

 

 

3、getWidth和getMeasuredWidth的相同点和不同点

先看一下它们的英文解释,

Google文档的英文说明:

getWidth():

Return the width of the your view.

Returns: the width of your view, in pixels

getMeasuredWidth():

The width of this view as measured in the most recent call to measure(). This should be used during measurement and layout calculations only. Use getWidth() to see how wide a view is after layout.

Returns: the measured width of this view

相同点:

(1)、在类初始化时,如果在构造函数使用,使用这两个方法是得不到View的实际大小的,getWidth()和getMeasuredWidth()得到的结果都是0,但是可以从onDraw()方法或者dispatchDraw()方法里面获得。可以通过调用invalidate()来执行onDraw()和dispatchDraw()方法。

(2)、这两个方法所得到的结果的单位是像素即pixel。

不同点:

getWidth()指的是View在设定好布局后,整个View的宽度。

getMeasuredWidth(),指的是对View上的内容进行测量后得到的View内容占据的宽度。前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法里调用measure(0,0)才可以获得,否则得到的结果和getWidth()得到的结果是一样的。

4、ImageView的XML布局文件src和background属性区别

background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。

src指的是图片内容或者前景图,background指的是是背景图,它们两个可以同时使用。

此外:scaleType属性只对src起作用,background可设置透明度,比如。在ImageButton中就可以用android:scaleType控制图片的缩放方式。

5、常用的存储目录含义

Environment.getDataDirectory()

方法获取到/data目录

Environment.getDownloadCacheDirectory()

方法获取到/cache目录

Environment.getExternalStorageDirectory()

方法获取到 /mnt/sdcard目录

Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test

方法获取到/mnt/sdcard/test目录

Environment.getRootDirectory()

方法获取到/system目录

getPackageCodePath()

方法获取到/data/app/包名-1.apk目录

getPackageResourcePath()

方法获取到/data/app/com.my.app-1.apk

getCacheDir()

方法获取到/data/data/com.my.app/cache目录

getDatabasePath(“test”)

方法获取到 /data/data/com.my.app/databases/test目录

getExternalCacheDir()

方法获取到/mnt/sdcard/Android/data/com.my.app/cache目录

getExternalFilesDir()

方法获取到/mnt/sdcard/Android/data/com.my.app/files目录

getExternalFilesDir(null)

方法获取到 /mnt/sdcard/Android/data/包名/files目录

getFilesDir() =

方法获取到 /data/data/包名p/files目录

6、xml中的一些特殊字符表示方法

xml中如果有一些特殊字符,需要进行特殊处理。最常见的是strings.xml中有一些特殊字符,比如:&,@等。

平时常见的需要处理的字符如下所示,

& - &

< - <

> - >

" - "

' - '

{ - {

} - }

@ - @

? - ?

其中,& - &表示用&代替&,其它类似。

例如,

帮助 & 反馈

实际字符串表示:帮助 & 反馈

可以参考如下链接获得更多,

http://www.runoob.com/tags/ref-entities.html

7、了解一些Android系统自带的样式

android:theme="@android:style/Theme.Dialog"

用来设置Activity显示为对话框模式

android:theme="@android:style/Theme.NoTitleBar"

设置不显示应用程序标题栏 

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

设置不显示应用程序标题栏,并全屏显示

android:theme="Theme.Light"

设置背景为白色 

android:theme="Theme.Light.NoTitleBar"

设置白色背景并无标题栏 

android:theme="Theme.Light.NoTitleBar.Fullscreen"

设置白色背景,无标题栏,全屏 

android:theme="Theme.Black"

设置背景黑色 

android:theme="Theme.Black.NoTitleBar"

设置黑色背景并无标题栏 

android:theme="Theme.Black.NoTitleBar.Fullscreen"

设置黑色背景,无标题栏,全屏 

android:theme="Theme.Wallpaper"

设置用系统桌面为应用程序背景 

android:theme="Theme.Wallpaper.NoTitleBar"

设置用系统桌面为应用程序背景,且无标题栏 

android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen"

设置用系统桌面为应用程序背景,无标题栏,全屏 

android:theme="Translucent" 

设置半透明背景

android:theme="Theme.Translucent.NoTitleBar" 

设置半透明背景并无标题

android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 

设置半透明背景并无标题,全屏

android:theme="Theme.Panel"  

设置面板风格显示

android:theme="Theme.Light.Panel"

设置较淡的面板风格显示

8、什么是Gradle?

维基上对Gradle的解释:Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,而抛弃了传统的XML的各种繁琐配置。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。

9、AOSP、AOKP、CM的区别

以下来源于网上,进行了简单总结:

AOSP是“Android Open-Source Project”的缩写,中文名称为Android 开放源代码项目。我们知道Android 是开源操作系统,所以Google 每发布一个Android版本,都会给开源社区发放对应版本的源代码,也就是我们所说的AOSP ROM,这可以称得上是最为纯净的Android 系统。

AOKP 的全称为“Android Open-Source Kang Project”,比AOSP 多了一个“Kang”。在Android社区中,Kang是一个术语,即用来表示这是一个被他人修改过的ROM,修改ROM的人不属于制作ROM的团队或没有该团队的授权。AOKP 是由民间团队开发和维护的,相比原汁原味的AOSP,AOKP 显得更为激进,在功能强大的同时,不稳定始终是AOKP 无法撕下的标签。

CM 是CyanogenMod 的简称,Cyanogen团队是全球最大的第三方ROM编译团队,覆盖机型范围相当之广,几乎所有热门机型都有相对应的CM ROM可以刷机使用。国内知名ROM作品 MIUI 早期也是直接采用了CM 的源代码,才能迅速在多个机型上普及。

10、WebP格式

WebP格式,谷歌(google)于2010年推出开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据空间。一些知名网站如Facebook Ebay等已经开始测试并使用WebP格式。

谷歌表示,这种格式的主要优势在于高效率。他们发现,“在质量相同的情况下,WebP格式图像的体积要比JPEG格式图像小40%。

但WebP是一种有损压缩。相较编码JPEG文件,编码同样质量的WebP文件需要占用更多的计算资源。


每天一点小知识【9】_第1张图片
本公众号将以推送Android各种碎片化小知识或小技巧,以及整理老司机日常工作中踩过的坑涉及到的知识点为主,也会不定期将正在学习使用的React Native一些知识点总结出来进行分享。每天一点干货小知识把你的碎片时间充分利用起来。

你可能感兴趣的:(每天一点小知识【9】)