前言
TextView是安卓开发人员接触最早的控件,Android Studio新建一个默认工程,进入之后展现在我们面前的就是Hello World
,呈现这个文字的控件就是TextView。本文只是说一说一些应用。
相关的使用
1.行间距和字间距控制
说到这两个东西接触的还真没有这么多,但是文字距离的太近就是不好看。
行间距:行间距用android:lineSpacingExtra=“”或者setLineSpacing(float add, float mult)
字间距:android:letterSpacing=“”或者setLetterSpacing(float letterSpacing)
1.1 行间距,直接上代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标识号会被烧入终端里,并且不能被修改。可用来对移动式设备进行身份识别和跟踪。由于ESN号段是有限的资源,基本上耗尽,可能还有少量回收利用的号段,所以制定了56bits的MEID号段,用来取代32bits的ESN号段。" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:background="@color/colorAccent" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="1dp"
android:text="标识号会被烧入终端里,并且不能被修改。可用来对移动式设备进行身份识别和跟踪。由于ESN号段是有限的资源,基本上耗尽,可能还有少量回收利用的号段,所以制定了56bits的MEID号段,用来取代32bits的ESN号段。" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:background="@color/colorAccent" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="5dp"
android:text="标识号会被烧入终端里,并且不能被修改。可用来对移动式设备进行身份识别和跟踪。由于ESN号段是有限的资源,基本上耗尽,可能还有少量回收利用的号段,所以制定了56bits的MEID号段,用来取代32bits的ESN号段。" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="5dp"
android:background="@color/colorAccent" />
</LinearLayout>
得到的效果图如下:
很明显上面3段是不同的。
1.2 字间距,直接上代码:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标识号会被烧入终端里,并且不能被修改,默认" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="-0.1"
android:text="标识号会被烧入终端里,并且不能被修改,-0.1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="0.0"
android:text="标识号会被烧入终端里,并且不能被修改,0.0" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="0.1"
android:text="标识号会被烧入终端里,并且不能被修改,0.1" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="0.2"
android:text="标识号会被烧入终端里,并且不能被修改,0.2" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="0.3"
android:text="标识号会被烧入终端里,并且不能被修改,0.3" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:letterSpacing="0.4"
android:text="标识号会被烧入终端里,并且不能被修改,0.4" />
</LinearLayout>
得到的效果如下图所示:
很明显写入不同的值,字体之间的间距,就是不同。注意:如果是负值,就有向里缩的感觉。
2.android color 透明度列表
这个就是自己的一个总结:总是要查找,不如自己记录一下。哈哈
下面的显示就是不透明度,记住不透明度!!!
0% 00 | |||||||||
---|---|---|---|---|---|---|---|---|---|
1% 03 | 11% 1C | 21% 36 | 31% 4F | 41% 69 | 51% 03 | 61% 1C | 71% 36 | 81% 4F | 91% 69 |
2% 05 | 12% 1F | 22% 38 | 32% 52 | 42% 6B | 52% 85 | 62% 9E | 72% B8 | 82% D1 | 92% EB |
3% 08 | 13% 21 | 23% 3B | 33% 54 | 43% 6E | 53% 87 | 63% A1 | 73% BA | 83% D4 | 93% ED |
4% 0A | 14% 24 | 24% 3D | 34% 57 | 44% 70 | 54% 8A | 64% A3 | 74% BD | 84% D6 | 94% F0 |
5% 0D | 15% 26 | 25% 40 | 35% 59 | 45% 73 | 55% 8C | 65% A6 | 75% BF | 85% D9 | 95% F2 |
6% 0F | 16% 29 | 26% 42 | 36% 5C | 46% 75 | 56% 8F | 66% A8 | 76% C2 | 86% DB | 96% F5 |
7% 12 | 17% 2B | 27% 45 | 37% 5E | 47% 78 | 57% 91 | 67% AB | 77% C4 | 87% DE | 97% F7 |
8% 14 | 18% 2E | 28% 47 | 38% 61 | 48% 7A | 58% 94 | 68% AD | 78% C7 | 88% E0 | 98% FA |
9% 17 | 19% 30 | 29% 4A | 39% 63 | 49% 7D | 59% 96 | 69% B0 | 79% C9 | 89% E3 | 99% FC |
10% 1A | 20% 33 | 30% 4D | 40% 66 | 50% 80 | 60% 99 | 70% B3 | 80% CC | 90% E6 | 100% FF |
3.android 历史版本和对应的API Level
name | 版本代号 | API Level |
---|---|---|
Android11 | R | 30 |
Android 10.0 | Q | 29 |
Android 9.0 | Pie(馅饼) | 28 |
Android 8.1 | Oreo(奥利奥) | 27 |
Android 8.0 | Oreo(奥利奥) | 26 |
Android 7.1 | Nougat(牛轧糖) | 25 |
Android 7.0 | Nougat(牛轧糖) | 24 |
Android 6.0 | Marshmallow(棉花糖) | 23 |
Android 5.1 | Lollipop(棒棒糖) | 22 |
Android 5.0 | Lollipop(棒棒糖) | 21 |
Android 4.4W | KitKat(奇巧) | 20 |
Android 4.4 | KitKat(奇巧) | 19 |
Android 4.3 | Jelly Bean(果冻豆) | 18 |
Android 4.2 | Jelly Bean(果冻豆) | 17 |
Android 4.1 | Jelly Bean(果冻豆) | 16 |
Android 4.0.3-4.0.4 | Ice Cream Sandwich(冰淇淋三明治) | 15 |
Android 4.0-4.0.2 | Ice Cream Sandwich(冰淇淋三明治) | 14 |
Android 3.2 | Honeycomb(蜂巢) | 13 |
Android 3.1 | Honeycomb(蜂巢) | 12 |
Android 3.0 | Honeycomb(蜂巢) | 11 |
Android 2.3.3-2.3.7 | Gingerbread(姜饼) | 10 |
Android 2.3 - 2.3.2 | Gingerbread(姜饼) | 9 |
Android 2.2 - 2.2.3 | Froyo(冻酸奶) | 8 |
Android 2.1 | Éclair(闪电泡芙) | 7 |
Android 2.0.1 | Éclair(闪电泡芙) | 6 |
Android 2.0 | Éclair(闪电泡芙) | 5 |
Android 1.6 | Donut(甜甜圈) | 4 |
Android 1.5 | Cupcake(纸杯蛋糕) | 3 |
Android 1.1 | 2 | |
Android 1.0 | 1 |
4.android ProgressBar修改进度条的颜色
默认形式ProgressBar
默认方式下,ProgressBar显示为圆形进度,循环转圈,不显示具体的进度值,控制其显隐藏即可。
横向ProgressBar
横向带进度的进度条,通过设置ProgressBar的Style为style="?android:attr/progressBarStyleHorizontal",这样可以显示当前的进度。
自定义进度条背景,新建一个progressbar_bg_red.xml文件,里面的内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 设置背景色 -->
<item android:id="@android:id/background">
<shape android:shape="rectangle">
<solid android:color="#666666" />
</shape>
</item>
<!-- 设置进度条颜色 -->
<item android:id="@android:id/progress">
<clip>
<shape>
<gradient
<!-- 这里是使用的渐变 -->
android:endColor="#F05375"
android:startColor="#F05375" />
</shape>
</clip>
</item>
</layer-list>
设置背景:
xml
//xml中
<ProgressBar
android:id="@+id/progress_bar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="85dp"
android:layout_height="10dp"
android:layout_gravity="center"
android:max="100"
android:progress="50"
android:progressDrawable="@drawable/progressbar_bg_red"
/>
代码中设置
progressBar.setProgressDrawable(getResources().getDrawable(R.drawable.progressbar_bg_red));
这样就完成想要的进度条的颜色了。
5. TextView一些样式的实现。
//下划线,两种实现
tv_text.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG);
tv_text1.getPaint().setUnderlineText(true);
//抗锯齿
tv_text2.getPaint().setAntiAlias(true);
//中划线
tv_text3.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
// 设置中划线并加清晰
tv_text4.getPaint().setFlags(Paint. STRIKE_THRU_TEXT_FLAG|Paint.ANTI_ALIAS_FLAG);
//字体加粗
tv_text5.getPaint().setFakeBoldText(true);
效果图如下:
6. 隐藏底部虚拟按键
竖屏显示虚拟按键:
//显示虚拟按键
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
//低版本sdk
View v = getWindow().getDecorView();
v.setSystemUiVisibility(View.VISIBLE);
} else if (Build.VERSION.SDK_INT >= 19) {
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
横屏隐藏虚拟按键:
//隐藏虚拟按键
if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) {
View v = getWindow().getDecorView();
v.setSystemUiVisibility(View.GONE);
} else if (Build.VERSION.SDK_INT >= 19) {
View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
7. Android字体度量(FontMetrics)
字体的度量,是指对于指定字号的某种字体,在度量方面的各种属性,其描述参数包括:
top:字符最高点到baseline的最大距离
ascent:字符最高点到baseline的推荐距离
baseline:字符基线
descent:字符最低点到baseline的推荐距离
bottom:字符最低点到baseline的最大距离
leading:行间距,即前一行的descent与下一行的ascent之间的距离
getLineHeight():行高 = ascent + descent + leading,即字符的高度+行间距,可以通过descent+Math.abs(ascent) + leading计算得到。
参照下面这些图来帮助理解上述概念:
8. ImageView 的scaleType 属性图解
Android 提供了八种scaleType
的属性值,每种都对应了一种展示方式,下面就对每一种scaleType
属性值进行图文解释。
参考文章,可以看图: Android ImageView 的scaleType 属性图解
八个ScaleType,其实可以分为三个类型:
- 以FIT_开头的4种,它们的共同点是都会对图片进行缩放;
- 以CENTER_开头的3种,它们的共同点是居中显示,图片的中心点会与ImageView的中心点重叠;
- ScaleType.MATRIX,这种就直接翻到最后看内容吧;
ScaleType.FIT_CENTER 默认,等比缩放,居中完全显示
保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央。在该模式下,图片会被等比缩放到能够填充控件大小,并居中展示。ScaleType.FIT_START 等比缩放,完全显示
图片等比缩放到控件大小,并放置在控件的上边或左边展示。ScaleType.FIT_END 等比缩放,完全显示
图片等比缩放到控件大小,并放置在控件的下边或右边展示。ScaleType.FIT_XY 不是等比缩放,完全显示
图片缩放到控件大小,完全填充控件大小展示。注意,此模式不是等比缩放。ScaleType.CENTER 不使用缩放,根据实际大小显示
不使用缩放,ImageView会展示图片的中心部分,即图片的中心点和ImageView的中心点重叠。ScaleType.CENTER_CROP 等比缩放,完全填充控件
这是我最喜欢的模式,因为在该模式下,图片会被等比缩放直到完全填充整个ImageView,并居中显示。ScaleType.CENTER_INSIDE 等比缩放,完全显示图片
使用此模式以完全展示图片的内容为目的。图片将被等比缩放到能够完整展示在ImageView中并居中,如果图片大小小于控件大小,那么就直接居中展示该图片。ScaleType.MATRIX
该模式需要与ImageView.setImageMatrix(Matrix matrix)
配合使用,因为该模式需要用于指定一个变换矩阵用于指定图片如何展示。其实前面的7种模式都是通过ImageView在内部生成了相应的变换矩阵,等于是提供了该模式的一种特定值,使用这个模式只要传入相应矩阵,也就能实现上述七种显示效果。
9. Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法
Android.util.Log
常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e()
。根据首字母对应VERBOSE
,DEBUG
, INFO
, WARN
,ERROR
。
1、Log.v
的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v("","")
;
2、Log.d
的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.
3、Log.i
的输出为绿色,一般提示性的消息information
,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息
4、Log.w
的意思为橙色,可以看作为warning
警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
5、Log.e
为红色,可以想到error
错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。