这是我参与「第四届青训营」笔记创作的第 5 天
此篇笔记是 Android 基础 —— 几种简单控件(一)视图基础
本篇笔记分为 3 部分
- 设置文本的内容
- 设置文本的大小
- 常见的字号单位
二、几种简单控件
本篇笔记将介绍如何在文本视图 TextView 上显示规定的文本,包括:怎样在 XML 文件和 Java 代码中设置文本内容,尺寸的大小有哪些单位、又该怎样设置文本的大小,颜色的色值是如何表达的、又该怎样设置文本的颜色。
文本显示
1.设置文本的内容
文本内容的两种方式,一种是在 XML 文件中通过属性 android:text 设置文本,比如下面这样:
<TextView
android:id="@+id/tv_hello"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
另一种是在Java代码中调用文本视图对象的setText方法设置文本,比如下面这样:
TextView textView= findViewById(R.id.tv_hello);
textView.setText("你好,世界!");
2.设置文本的大小
TextView允许设置文本内容,也允许设置文本大小,在Java代码中调用setTextSize方法,即可指定文本 大小,就像以下代码这样:
TextView tv_hello = findViewById(R.id.tv_hello);
tv_hello.setTextSize(30);
这里的大小数值越大,则看到的文本也越大;大小数值越小,则看到的文本也越小。
在XML文件中则通 过属性android:textSize指定文本大小,可是如果给TextView标签添加“android:textSize="30"”,数字马 上变成红色如图所示,鼠标移过去还会提示错误“Cannot resolve symbol '30'”,意思是无法解析“30” 这个符号。
原来文本大小存在不同的字号单位,XML文件要求在字号数字后面写明单位类型,常见的字号单位主要有px、dp、sp 3种,分别介绍如下。
- px
px是手机屏幕的最小显示单位,它与设备的显示屏有关。一般来说,同样尺寸的屏幕(比如6英寸手机),如果看起来越清晰,则表示像素密度越高,以px计量的分辨率也越大。
- dp
dp有时也写作dip,指的是与设备无关的显示单位,它只与屏幕的尺寸有关。一般来说,同样尺寸的屏幕以dp计量的分辨率是相同的,比如同样是6英寸手机,无论它由哪个厂家生产,其分辨率换算成dp单 位都是一个大小。
- sp
sp的原理跟dp差不多,但它专门用来设置字体大小。手机在系统设置里可以调整字体的大小(小、标 准、大、超大)。设置普通字体时,同数值dp和sp的文字看起来一样大;如果设置为大字体,用dp设置 的文字没有变化,用sp设置的文字就变大了。字体大小采用不同单位的话,显示的文字大小各不相同。例如,30px、30dp、30sp这3个字号,在不同 手机上的显示大小有所差异。有的手机像素密度较低,一个dp相当于两个px,此时30px等同于15dp;有的手机像素密度较高,一个dp相当于3个px,此时30px等同于10dp。假设某个App的内部文本使用字 号30px,则该App安装到前一部手机的字体大小为15dp,安装到后一部手机的字体大小为10dp,显然 后一部手机显示的文本会更小。
至于dp与sp之间的区别,可通过以下实验加以观察。首先创建测试活动页面,该页面的 XML 文件分别声明30px、30dp、30sp这3个字号的TextView控件,布局内容如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_size_px"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/hello_world"
android:textSize="30" />
<TextView
android:id="@+id/tv_size_dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/hello_world"
android:textSize="30dp" />
<TextView
android:id="@+id/tv_size_sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/hello_world"
android:textSize="30sp" />
</LinearLayout>