【Android】自定义控件
- 官方文档:https://developer.android.google.cn/guide/topics/ui/custom-components
- 参考:
- 继承View类或其子类
- 覆盖onDraw()方法以自定义控件怎么“画”
1
2
3
4
5
6
7
8
9
10
public class MyView extends View {
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
}
}
- 添加自定义控件的方法:
- 静态添加:在布局文件中
1 2 3
<com.example.MyView android:layout_width="match_parent" android:layout_height="wrap_content" />
- 动态添加:在代码中
1 2
myView1 = new MyView(this); linearLayout1.addView(myView1);
- 自定义属性
(1) 在{工程目录}/app/src/main/res/values/attrs.xml中声明自定义属性
1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="number" format="integer" />
<attr name="text" format="string" />
</declare-styleable>
</resources>
(2) 在构造器中获取自定义属性的值
1
2
3
4
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView, defStyleAttr, defStyleRes);
number = a.getInteger(R.styleable.MyView_number, 0);
text = a.getBoolean(R.styleable.MyView_text, "");
a.recycle();
(3) 在xml中使用自定义属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.example.MyView
android:id="@+id/myView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:number="1"
app:text="abc" />
</LinearLayout>
This post is licensed under CC BY 4.0 by the author.