【Android基础 1.3】Text and scrolling views

本文深入探讨了ScrollView和TextView在Android应用开发中的使用技巧,包括如何创建可滚动的视图、优化性能、显示HTML格式文本及插入网页链接。通过具体实例展示了如何在ScrollView中嵌套LinearLayout以实现复杂布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次codelab

前几次的 codelab 都比较简单,都是基于 Layout Editor 的,控件拖来拖去,没啥好讲的。那么这次的主要内容的是 TextView 和 ScrollView。

ScrollView 提供了一个可以滚动的视图,它是 FrameLayout 的子类。ScrollView 只能有一个子 View,当然这个子 View 它本身可以是 ViewGroup(比如 LinearLayout)可以包含很多UI控件。

复杂的视图结构可能造成性能的降低。在 ScrollView 中 放一个垂直布局的 LinearLayout 是个不错的选择。在一个ScrollView 中所有的 UI 控件都会被加载到内存中,即使它们没有显示出来,这使得 ScrollView 可以流畅的滚动视图。但是,这也造成了 ScrollView 可能会使用很多内存,这会影响 app 的性能。如果想要显示很长的列表,并且是可编辑,可删除的,那么你可以考虑 RecyclerView。

接下来的内容:

  • 使用 XML 添加多个 TextView
  • 显示 HTML 格式的文本
  • 在文本中插入网页连接

显示 HTML 格式的文本

  • TextView 会解析支持的 HTML 标签(<br></br><i></i>),其他的标签都会被忽略,这两个只是对文本的加粗和斜体,功能比较少。

  • \n表示换行

  • 加粗和斜体可以一起使用:<b><i>...words...</i></b>

  • 如果要使用 符号,必须进行转义,其他非 ASCII 字符也需要转义。

插入链接

在 TextView 中添加android:autoLink="web",这样便可以自动识别文本中的链接,并且进行高亮处理,点击可以调转到浏览器。

Solution Code

完成 Task 1 和 Task 2 后的 XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <TextView
            android:id="@+id/article_heading"
            android:layout_width="match_parent"
            android:background="@color/colorPrimary"
            android:textColor="@android:color/white"
            android:padding="@dimen/text_padding"
            android:text="@string/article_title"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:textStyle="bold"
            android:layout_height="wrap_content"/>

    <ScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/article_heading">

        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

            <TextView
                    android:id="@+id/article_subheading"
                    android:layout_width="wrap_parent"
                    android:layout_height="wrap_content"
                    android:padding="@dimen/text_padding"
                    android:text="@string/article_subtitle"
                    android:textAppearance=
                            "@android:style/TextAppearance.DeviceDefault"/>

            <TextView
                    android:id="@+id/article"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:lineSpacingExtra="5sp"
                    android:padding="@dimen/text_padding"
                    android:autoLink="web"
                    android:text="@string/article_text"/>
        </LinearLayout>

    </ScrollView>

</RelativeLayout>

Homework

Question 1

How many views can you use within a ScrollView? Choose one:

  • One view or one view group

Question 2

Which XML attribute do you use in a LinearLayout to show views side by side? Choose one:

  • android:orientation="horizontal"

Question 3

Which XML attribute do you use to define the width of the LinearLayout inside the scrolling view? Choose one:

  • android:layout_width="match_parent"

Solution

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    <TextView
            android:id="@+id/article_heading"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            android:textColor="@android:color/white"
            android:padding="@dimen/text_padding"
            android:layout_margin="16dp"
            android:text="@string/article_title"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:textStyle="bold"/>

    <ScrollView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/article_heading">

        <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal">

            <TextView
                    android:id="@+id/article_subheading"
                    android:layout_width="100dp"
                    android:layout_height="wrap_content"
                    android:padding="@dimen/text_padding"
                    android:text="@string/article_subtitle"
                    android:textAppearance=
                            "@android:style/TextAppearance.DeviceDefault"/>

            <TextView
                    android:id="@+id/article"
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_height="wrap_content"
                    android:lineSpacingExtra="5sp"
                    android:padding="@dimen/text_padding"
                    android:autoLink="web"
                    android:text="@string/article_text"/>
        </LinearLayout>

    </ScrollView>

</RelativeLayout>

homwwor1.3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值