Android 基础 — 3、几种简单控件(一)视图基础 | 青训营笔记

190 阅读3分钟

这是我参与「第四届青训营」笔记创作的第 5 天

此篇笔记是 Android 基础 —— 几种简单控件(一)视图基础

本篇笔记分为 3 部分

  1. 设置文本的内容
  2. 设置文本的大小
  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” 这个符号。

image.png

### 3.常见的字号单位

原来文本大小存在不同的字号单位,XML文件要求在字号数字后面写明单位类型,常见的字号单位主要有px、dp、sp 3种,分别介绍如下。

  1. px

px是手机屏幕的最小显示单位,它与设备的显示屏有关。一般来说,同样尺寸的屏幕(比如6英寸手机),如果看起来越清晰,则表示像素密度越高,以px计量的分辨率也越大。

  1. dp

dp有时也写作dip,指的是与设备无关的显示单位,它只与屏幕的尺寸有关。一般来说,同样尺寸的屏幕以dp计量的分辨率是相同的,比如同样是6英寸手机,无论它由哪个厂家生产,其分辨率换算成dp单 位都是一个大小。

  1. 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>