基础属性详解
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>