Android 自总结的一些小细节

前言

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显示为圆形进度,循环转圈,不显示具体的进度值,控制其显隐藏即可。


image.png

横向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计算得到。

参照下面这些图来帮助理解上述概念:


属性显示图.png
间距图.png
TextView可以获取的属性.png
详细说明图.png
仍物线老人家的图

8. ImageView 的scaleType 属性图解

Android 提供了八种scaleType的属性值,每种都对应了一种展示方式,下面就对每一种scaleType属性值进行图文解释。
参考文章,可以看图: Android ImageView 的scaleType 属性图解

八个ScaleType,其实可以分为三个类型:

  • 以FIT_开头的4种,它们的共同点是都会对图片进行缩放;
  • 以CENTER_开头的3种,它们的共同点是居中显示,图片的中心点会与ImageView的中心点重叠;
  • ScaleType.MATRIX,这种就直接翻到最后看内容吧;
  1. ScaleType.FIT_CENTER 默认,等比缩放,居中完全显示
    保持纵横比缩放图片,缩放完成后将图片放在ImageView的中央。在该模式下,图片会被等比缩放到能够填充控件大小,并居中展示。

  2. ScaleType.FIT_START 等比缩放,完全显示
    图片等比缩放到控件大小,并放置在控件的上边或左边展示。

  3. ScaleType.FIT_END 等比缩放,完全显示
    图片等比缩放到控件大小,并放置在控件的下边或右边展示。

  4. ScaleType.FIT_XY 不是等比缩放,完全显示
    图片缩放到控件大小,完全填充控件大小展示。注意,此模式不是等比缩放。

  5. ScaleType.CENTER 不使用缩放,根据实际大小显示
    不使用缩放,ImageView会展示图片的中心部分,即图片的中心点和ImageView的中心点重叠。

  6. ScaleType.CENTER_CROP 等比缩放,完全填充控件
    这是我最喜欢的模式,因为在该模式下,图片会被等比缩放直到完全填充整个ImageView,并居中显示。

  7. ScaleType.CENTER_INSIDE 等比缩放,完全显示图片
    使用此模式以完全展示图片的内容为目的。图片将被等比缩放到能够完整展示在ImageView中并居中,如果图片大小小于控件大小,那么就直接居中展示该图片。

  8. 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() 。根据首字母对应VERBOSEDEBUG, INFO, WARNERROR

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错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容