View 的构造函数有四个:
public View(Context context)
public View(Context context, @Nullable AttributeSet attrs)
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr)
public View(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes)
我们在自定义 View 继承 View 的时候,1 和 2 是必须重写的。
第 1 个构造函数是在 java 代码中声明一个 View 时所用。
第 2 个构造函数是在布局文件中声明一个 View 时所用。参数 attrs 可以获取在布局文件中定义的 View 的属性值。
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.CustomTextView);
String text = ta.getString(R.styleable.CustomTextView_text);
ta.recycle();
构造函数 3 和 4 是可选的,
在讲这两个构造函数之前,我们先来复习一下属性和主题。
View 有很多属性,我们有以下 5 种方法给这些属性赋值:
- xml 中直接定义
<TextView
android:textSize="40sp"
android:textColor="@color/black"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
- xml 中 style 引用
<style name="MyTextViewStyle">
<item name="android:textSize">40sp</item>
<item name="android:textColor">@color/black</item>
</style>
<TextView
style="@style/MyTextViewStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
- theme 中直接定义
<style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkAc