文章是视频学习中的笔记,和一些代码示例。
1:自定义view的三个构造函数分别在什么时候调用
public class MyTextView extends TextView {
//构造函数会在代码中new的时候调用
// MyTextView textView=new MyTextView(this);
public MyTextView(Context context) {
super(context);
}
//在布局layout中使用
// <com.example.myapplication.MyTextView
//android:layout_width="wrap_content"
//android:layout_height="wrap_content"
//android:text="hello"/>
public MyTextView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
//在布局layout中使用 但是会有style
// <com.example.myapplication.MyTextView
// style="@style/MyTextView"
// android:text="hello" />
public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//获取自定义属性
}
}
2:自定义TextView的属性,现在res下创建一个attrs.xml (名称可以随便取,但最好是这个名字)
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--name 最好就是自定义view的名字-->
<declare-styleable name="MyTextView">
<attr name="text" format="string"/>
<!--reference: 资源的引用-->
<attr name="background" format="color|reference"/>
<!--dimension: 宽高,字体大小-->
<attr name="textSize" format="dimension"/>
</declare-styleable>
</resources>
3:在layout文件中使用attrs中对应的属性
? ? ? ? 首先在根布局中添加
????????xmlns:app="http://schemas.android.com/apk/res-auto"
? ? ? ?接下来就可以使用自定义的属性了
????????
<com.example.myapplication.MyTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:text="what"
app:textSize="18sp" />
4:接下来重写MyTextView的super,然后获取自定义属性
public class MyTextView extends TextView {
private String mText;
private int mTextSize;
//构造函数会在代码中new的时候调用
// MyTextView textView=new MyTextView(this);
public MyTextView(Context context) {
// super(context);
this(context, null);//使用这种方式会调用第二个构造函数
}
//在布局layout中使用
// <com.example.myapplication.MyTextView
//android:layout_width="wrap_content"
//android:layout_height="wrap_content"
//android:text="hello"/>
public MyTextView(Context context, @Nullable AttributeSet attrs) {
// super(context, attrs);
this(context, attrs, 0);//使用这种方式会调用第三个构造函数,这样就可以只在第三个构造函数中获取自定义属性
}
//在布局layout中使用 但是会有style
// <com.example.myapplication.MyTextView
// style="@style/MyTextView"
// android:text="hello" />
public MyTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//获取自定义属性
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyTextView);
mText = array.getString(R.styleable.MyTextView_text);
mTextSize = array.getDimensionPixelSize(R.styleable.MyTextView_textSize, mTextSize);
array.recycle();
}
}
目前仅写到此处,后续更新
????????
|