继续总结本司机在工作过程中涉及到的一些小知识点或小的技巧,其中有代码片段,也有知识点,经验总结和分享。
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属性,说明一下。
<!-- 基于系统Dialog样式的基础上进行Dialog定义,相当于新的Dialog继承系统样式-->
<style name="DialogCustom" parent="@android:style/Theme.Dialog"
<!-- 指定新Dialog的windowFrame框为无->
<item name="android:windowFrame">@null</item>
<!-- Dialog窗口是否半透明-->
<item name="android:windowIsTranslucent">false</item>
<!--是否显示title -->
<item name="android:windowNoTitle">true</item>
<!-- 设置dialog的背景为bg-->
<item name="android:windowBackground">@drawable/bg</item>
<!-- 背景是否模糊显示-->
<item name="android:backgroundDimEnabled">true</item>
<!-- 背景模糊显示的程度,1.0为最模糊,0为清晰-->
<item name="android:backgroundDimAmount">0.6</item>
<!-- 设置Dialog进出的显示动画-->
<item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
<!-- 是否有内容覆盖-->
<item name="android:windowContentOverlay">@null</item>
<!-- 对话框是否浮动-->
<item name="android:windowIsFloating">true</item>
</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文件需要占用更多的计算资源。
本公众号将以推送Android各种碎片化小知识或小技巧,以及整理老司机日常工作中踩过的坑涉及到的知识点为主,也会不定期将正在学习使用的React Native一些知识点总结出来进行分享。每天一点干货小知识把你的碎片时间充分利用起来。