控件TextView

Posted 一只小阿大嗷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控件TextView相关的知识,希望对你有一定的参考价值。

基础属性详解

1:layout_width:组件的宽度
2:layout_height:组件的高度
3:id:为TextView:设置一个组件id
4:text:设置显示的文本内容
5:textColor:设置字体颜色(#后面有八位,前两位是透明度,后六位每两位分别为红绿蓝)
6:textStyle:设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体)
7:textSize:字体大小,单位一般用sp
8:background:控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片
9:gravity:设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等

在这里插入图片描述
在这里插入图片描述
在tv_one.setText(“Finny”);这句话重新赋值了android:text=“one two three”,所以显示的是Finny不是one two three

一般来说颜色和文字应该放到values中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
颜色也是一样的

代码

MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //找到id为tv_one的TextView这个控件
        TextView tv_one = findViewById(R.id.tv_one);
        tv_one.setText("Finny");
    }
}

activity_main.xml

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

    <TextView
        android:id="@+id/tv_one"
        android:text="@string/tv_one"
        android:textColor="@color/green"
        android:textStyle="bold"
        android:textSize="30sp"
        android:background="@color/red"
        android:gravity="center"
        android:layout_width="200dp"
        android:layout_height="200dp"
        />

</LinearLayout>

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="red">#FFFF0000</color>
    <color name="green">#FF00FF00</color>
</resources>

string.xml

<resources>
    <string name="app_name">My Application</string>
    <string name="tv_one">one two three</string>
</resources>

效果图

在这里插入图片描述

带阴影的TextView

1.android:shadowColor:设置阴影颜色,需要与shadowRadius一起使用
2.android:shadowRadius:设置阴影的模糊程度,设为0.1就变成字体颜色,建议使用3.0
3.android:shadowDx:设置阴影在水平方向的偏移,就是水平方向阴影开始的横坐标位置
4.android:shadowDy:设置阴影在竖直方向的偏移,就是竖直方向阴影开始的纵坐标位置
在这里插入图片描述
activity_main.xml

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

    <TextView
        android:id="@+id/tv_one"
        android:text="@string/tv_one"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:textSize="30sp"
        android:gravity="center"
        android:shadowRadius="3.0"
        android:shadowColor="@color/red"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:layout_width="200dp"
        android:layout_height="200dp"
        />

</LinearLayout>

实现跑马灯效果的TextView

1.android:singleLine:内容单行显示
2.android:focusable:是否可以获取焦点
3.android:focusableInTouchMode:用于控制视图在触摸模式下是.否可以聚焦
4.android:ellipsize:在哪里省略文本
5.android:marqueeRepeatLimit:字幕动画重复的次数

在这里插入图片描述
像这样的文字格式无法实现跑马灯,需要一行显示,这就需要android:singleLine
在这里插入图片描述
加了android:singleLine后发现后面有省略号,这也不是跑马灯的形式,就需要更改省略方式android:ellipsize,有几种方式,我选择的是marquee

android:marqueeRepeatLimit="marquee_forever"无限循环流动

再设置android:focusable和android:focusableInTouchMode为true

发现TextView没有获取焦点,还是跑不起来
解决方法:
1.android:clickable="true"通过点击让他跑起来
2.自定义一个TextView,一进来就跑起来了

MyTextView.java

package com.example.myapplication;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

import androidx.annotation.Nullable;

public class MyTextView extends TextView {

    public MyTextView(Context context) {
        super(context);
    }

    public MyTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    //TextView获取焦点
    public boolean isFocused() {
        return true;
    }
}

activity_main.xml

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

    <com.example.myapplication.MyTextView
        android:id="@+id/tv_one"
        android:text="@string/tv_one"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:textSize="30sp"
        android:gravity="center"
        android:shadowRadius="3.0"
        android:shadowColor="@color/red"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:layout_width="200dp"
        android:layout_height="200dp"

        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true"

        />

</LinearLayout>

3.加个requestFocus请求焦点,也是一进来就跑起来
activity_main.xml

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

    <TextView
        android:id="@+id/tv_one"
        android:text="@string/tv_one"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:textSize="30sp"
        android:gravity="center"
        android:shadowRadius="3.0"
        android:shadowColor="@color/red"
        android:shadowDx="10.0"
        android:shadowDy="10.0"
        android:layout_width="200dp"
        android:layout_height="200dp"

        android:singleLine="true"
        android:ellipsize="marquee"
        android:marqueeRepeatLimit="marquee_forever"
        android:focusable="true"
        android:focusableInTouchMode="true">
        <requestFocus/>
    </TextView>

</LinearLayout>

以上是关于控件TextView的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 片段函数实现不会在 TextView 中将文本格式化为 HTML

用片段替换某些东西

在带(继承)TextView的控件中,在代码中动态更改TextView的文字颜色

动态 TextView 未在片段中更新

Android从另一个片段设置Textview

片段 TextView 无法从 parcelable 对象更新