安卓APP_ 控件(1)—— TestView

本文为学习笔记,是安卓APP学习的开篇。

根据教学视频内容记录学习过程。笔记适合复习的时候看,初次学习还是建议先看一遍视频教程(老师讲得很好哦)

作者:Android架构解析:leo老师
教学视频地址:【2021最新版】Android(安卓)开发零基础入门课程【全套】

TestView

README

注意:一定要有爪蛙基础,先把陈立臣老师的爪蛙基础课看完。

可以回顾java基础系列笔记:如:java的面向对象基础(3) —— 接口,抽象类、内部类、匿名内部类

一、容器的创建与TextView控件的使用:字体样式

下面涉及到两个主要的文件类型:

.xml负责页面布局效果,.java负责后台逻辑。

先做一个最简单的例子,显示效果如下图:
安卓APP_ 控件(1)—— TestView

(1)MainActivity.java

重点看Main中注释的两句,其他都是框架。在Main中,主要创建了一个控件对象 tv_one

package com.example.myfirst;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.TextView; //引入控件的包

public class MainActivity extends AppCompatActivity {

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

        TextView tv_one = findViewById(R.id.tv_one); //创建控件对象
        tv_one.setText("huatianzhu");//这里设置的内容会把xml中的相同设置覆盖
                                    //所以你看到的不是“就这就这”    
    }
}

(2)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">

    <!-- 
    id               控件id,唯一标识一个控件;
    textColor        设置颜色引用了color名为teal_200里面的内容;
    -->

    <!-- 控件设置-->
    <TextView
        android:id="@+id/tv_one"
        android:text="@string/tv_one"
        android:textColor="@color/teal_200"
        android:textStyle="italic"
        android:textSize="70sp"
        android:background="@color/purple_200"
        android:gravity="center_vertical"
        android:layout_width="match_parent"
        android:layout_height="200dp"/>

</LinearLayout>

这里首先创建了一个容器,把控件放在容器中,并且控件的范围不得大于容器。

控件框范围的单位dp和字体大小sp都是为了进行不同机型,不同屏幕大小而适配。

(3)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>

</resources>

调用一个颜色示例:android:textColor="@color/teal_200"

(4)strings.xml

可以理解为字符串库

<resources>
    <string name="app_name">myFirst</string>
    <string name="tv_one">就这就这</string>
</resources>

调用方法与颜色相同

二、设置字体阴影

如下图:

安卓APP_ 控件(1)—— TestView
activity_main.xml的基础上添加:(注意不用添加TextView框架,这里仅为了CSDN中的代码高亮)

<!--
	shadowColor    阴影颜色
	shadowRadius   阴影模糊度,一般设置为3.0
	shadowDx       阴影横向偏离
	shadowDy       阴影纵向偏离
-->

<TextView
	   android:shadowColor="@color/purple_200"
	   android:shadowRadius="3.0"
	   android:shadowDx="15.0"
	   android:shadowDy="15.0" "
	   />

三、字体弹幕跑马效果

效果:

安卓APP_ 控件(1)—— TestView
注意:先把.java创建对象的那两句去掉。

主要修改添加activity_main.xml中的代码

<!--
	   singleLine           内容单行显示:文本内容长度超过控件框进行自动换行
	   ellipsize            文本超出时,怎样处理省略的文本:这里设置为跑马灯(默认为换行)   
	   marqueeRepeatLimit   跑马灯效果循环次数
	   focusable            是否可以获得焦点
	   focusableInTouchMode 是否可以通过触摸获取焦点
	   clickable            是否可以点击
-->

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

TextView要获取焦点才能够实现跑马灯效果,上述的示例是通过触摸点击获取焦点。

但滚动的字幕一般多用于“自动”开启,所以还有以下两种办法自动获取焦点

(1)创建一个新的类myTextView,继承原来的TextView并且重写它的方法:

如下:在继承TextView的时候完成了它的前三个构造方法,并重写了一个方法实现直接获取焦点。

package com.example.myfirst;

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

import androidx.annotation.Nullable;

//老师是没有在app目录下创建的,而是新建了一个和app一样的文件夹,所以我在继承的时候要把这个TextView写全
public class myTextView extends androidx.appcompat.widget.AppCompatTextView {
    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
    public boolean isFocused() {
        return true;    //方法重写,直接return true,直接获取焦点
    }
}

此时在activity_main_xml中要更改为刚才创建的类:
安卓APP_ 控件(1)—— TestView这样运行程序便直接开始跑马灯效果。

(2)直接在控件TextView结束后请求焦点:

在activity_main_xml中

	<TextView
	
		.../>
	    
	<requestFocus/>
上一篇:TestView


下一篇:UI组件——TextView