第1章 简单控件 1.1 文本显示

        本节介绍如何在文本视图TextView上显示规定的文本,包括:怎样在XML文件和Java代码中设置文本内容,尺寸的大小有哪些单位、又该怎样设置文本的大小,颜色的色值是如何表达的、又该怎样设置文本的颜色。

1.1.1    设置文本的内容

        设置文本内容的两种方式,一种是在XML文件中通过属性android:text设置文本,比如下面这样:

<TextView
    android:id="@+id/tv_hello"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="你好,世界" />

        另一种是在Java代码中调用文本视图对象的setText方法设置文本,比如下面这样:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        // 获取名叫tv_hello的文本视图
        TextView tv_hello = findViewById(R.id.tv_hello);
        tv_hello.setText("你好,小黑狗");// 设置tv_hello的文字内容
    }
}

        在XML文件中设置文本的话,把鼠标移到“你好,世界”上方时,Android Studio会弹出如图所示的提示框。

 

        提示内容为“Hardcoded string "你好,世界",should use @string resouce”,意思是说这几个字是硬编码的字符串,建议使用来自@string的资源。Android Studio不推荐在XML布局文件里直接写字符串,因为可能有好几个页面都显示“你好,世界”,若想把这句话换成“你吃饭了吗?”,就得一个一个XML文件改过去,无疑费时费力。故而Android Studio推荐把字符串放到专门的地方进行管理,这个名为@string的地方位于res/values目录下的string.xml,打开该文件发现它的初始内容如下:

        string.xml定义了一个名为“app_name”的字符串常量,其值为“chapter03”。在此添加新的字符串定义,字符串名为“hello”,字符串值为“你好,小白狗”,添加之后的string.xml内容如下:

        添加完新的字符串定义,回到XML布局文件,将android:text属性值改为“@string/字符串名”这般,也就是“@string/hello”,修改之后的TextView标签示例如下:

        然后把鼠标移到“你好,小白狗”上方,此时Android Studio不再弹出任何提示了。

        若要在Java代码中引用字符串资源,则需要在调用setText方法时填写形如“R.string.字符串名”的参数,就本例而言填入“R.string.hello”,修改之后的Java代码示例如下:

         至此不管是XML文件还是Java代码都从string.xml引用字符串资源,以后想把“你好,小白狗”改为其他文字的话,只需改动string.xml一个地方即可。

1.1.2    设置文本的大小 

        TextView允许设置文本内容,也允许设置文本大小,在Java代码中调用setTextSize方法,即可指定文本大小,就像以下代码这样:

        这里的大小数值越大,则看到的文本也越大;大小数值越小,则看到的文本也越小。在XML文件中则通过属性android:textSize指定文本大小,可是如果给TextView标签添加“android:textSize="30"”,数字马上变成红色,鼠标移过去还会提示错误“Dimension value 30 must specify a unit,such as 'dp',意思是30必须指定一个单位,例如“dp”;如图所示。

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

        1.  px

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

        2.  dp

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

        3.  sp

        sp的原理跟dp差不多,但它专门用来设置字体大小,也是Android推荐的字号单位。手机在系统设置里可以调整字体的大小(小、标准、大、超大)。设置普通字体时,同数值dp和sp的文字看起来一样大;如果设置为大字体,用dp设置的文字没有变化,用sp设置的文字就变大了。

1.1.3    设置文本的颜色 

        除了文字大小外,文字颜色也经常需要修改,毕竟Android默认的灰色文字不够醒目。在Java代码中调用setTextColor方法即可设置文本颜色,具体在Color类中定义了12种颜色,详细的取值说明见表。

表1-1 颜色类型的取值说明
Color类中的颜色类型说明Color类中的颜色类型说明
BLACK黑色GREEN绿色
DKGRAY深灰BLUE蓝色
GRAY灰色YELLOW黄色
LTGRAY浅灰CYAN青色
WHITE白色MAGENTA玫红
RED红色TRANSPARENT透明

        比如以下代码便将文本视图的文字颜色改成了绿色:

<TextView
    android:id="@+id/tv_code_system"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="代码设置系统自带的颜色"
    android:textSize="17sp" />
// 从布局文件中获取名叫tv_code_system的文本视图
TextView tv_code_system = findViewById(R.id.tv_code_system);
// 将tv_code_system的文字颜色设置系统自带的绿色
tv_code_system.setTextColor(Color.GREEN);

        由于XML文件无法引用Color类的颜色常量,为此Android制定了一套规范的编码标准,将色值交由透明度alpha和RGB三原色(红色red、绿色green、蓝色blue)联合定义。该标准又有8位十六进制数与6位十六进制数两种表达方式,例如8位编码FFEEDDCC中,FF表示透明度,EE表示红色的浓度,DD表示绿色的浓度,CC表示蓝色的浓度。透明度为FF表示完全不透明,为00表示完全透明。RGB三色的数值越大,表示颜色越浓,也就越暗;数值越小,表示颜色越淡,也就越亮。RGB亮到极致就是白色,暗到极致就是黑色。

        至于6位十六进制编码,则有两种、情况:它在XML文件中默认不透明(等价于透明度为FF),在代码中默认透明(等价于透明度为00)。以下代码给两个文本视图分别设置6位色值与8位色值,注意添加0x前缀表示十六进制数:

<TextView
    android:id="@+id/tv_code_six"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="代码设置六位文字颜色"
    android:textSize="17sp" />
<TextView
    android:id="@+id/tv_code_eight"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="代码设置八位文字颜色"
    android:textSize="17sp" />
// 从布局文件中获取名叫tv_code_six的文本视图
TextView tv_code_six = findViewById(R.id.tv_code_six);
// 将tv_code_six的文字颜色设置为透明的绿色,透明就是看不到
tv_code_six.setTextColor(0x00ff00);
// 从布局文件中获取名叫tv_code_eight的文本视图
TextView tv_code_eight = findViewById(R.id.tv_code_eight);
// 将tv_code_eight的文字颜色设置为不透明的绿色,即正常的绿色
tv_code_eight.setTextColor(0xff00ff00);

        运行测试App,发现tv_code_six控件的文本不见了(其实是变透明了),而tv_code_eight控件的文本显示正常的绿色。

  

        在XML文件中可通过属性android:textColor设置文本颜色,但要给色值添加井号前缀(#),设定文本颜色的TextView标签示例如下:

<TextView
    android:id="@+id/tv_xml"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="布局文件设置六位文字颜色"
    android:textColor="#00ff00"
    android:textSize="17sp" />

 

        就像字符串资源那样,Android把颜色也当做一种资源,打开res/values目录下的colors.xml,发现里面已经定义了2种颜色:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
</resources>

        那么先在resources节点内部补充如下的绿色常量定义:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="green">#00ff00</color>
</resources>

        然后回到XML布局文件,把android:textColor的属性值改为“@color/颜色名称”,也就是android:textColor="@color/green",修改之后的TextView标签如下:

<TextView
    android:id="@+id/tv_values"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="资源文件引用六位文字颜色"
    android:textColor="@color/green"
    android:textSize="17sp" />

  

        不仅文本颜色,还有背景颜色也会用到上述的色值定义,在XML文件中通过属性android:background设置控件的背景颜色。Java代码则有两种方式设置背景颜色:倘若色值来自Color类或十六进制数,则调用setBackgroundColor方法设置背景颜色;倘若色值来自colors.xml中的颜色资源,则调用setBackgroundResource方法,以“R.color.颜色名称”的格式设置背景颜色。下面是两种方式的背景颜色设定代码例子:

<TextView
    android:id="@+id/tv_code_background"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="背景设置为绿色"
    android:textSize="17sp" />
// 从布局文件中获取名叫tv_code_background的文本视图
TextView tv_code_background = findViewById(R.id.tv_code_background);
// 将tv_code_background的背景颜色设置为绿色
tv_code_background.setBackgroundColor(Color.GREEN);// 在代码中定义的色值
//tv_code_background.setBackgroundResource(R.color.green); // 颜色来自资源文件

 

        注意属性android:background和setBackgroundResource方法,它俩用来设置控件的背景,不单单是背景颜色,还包括背景图片。在设置背景图片之前,先将图片文件放到res/drawable***目录(以drawable开头的目录,不仅仅是drawable目录),然后把android:background的属性值改为“@drawable/不含扩展名的图片名称”,或者调用setBackgroundResource方法填入“R.drawable.不含扩展名对的图片名称”。 

 

 

 

 

 

 

 

 

 

 

 

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值