Post

【Android】自定义控件

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.