本文为学习笔记,是安卓APP学习的开篇。
根据教学视频内容记录学习过程。笔记适合复习的时候看,初次学习还是建议先看一遍视频教程(老师讲得很好哦)
作者:Android架构解析:leo老师
教学视频地址:【2021最新版】Android(安卓)开发零基础入门课程【全套】
TestView
README
注意:一定要有爪蛙基础,先把陈立臣老师的爪蛙基础课看完。
可以回顾java基础系列笔记:如:java的面向对象基础(3) —— 接口,抽象类、内部类、匿名内部类 …
一、容器的创建与TextView控件的使用:字体样式
下面涉及到两个主要的文件类型:
.xml负责页面布局效果,.java负责后台逻辑。
先做一个最简单的例子,显示效果如下图:
(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>
调用方法与颜色相同
二、设置字体阴影
如下图:
在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" "
/>
三、字体弹幕跑马效果
效果:
注意:先把.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
中要更改为刚才创建的类:
这样运行程序便直接开始跑马灯效果。
(2)直接在控件TextView结束后请求焦点:
在activity_main_xml中
<TextView
.../>
<requestFocus/>