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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容