Hướng dẫn dành cho nhà phát triển Android có một phần được gọi là Xây dựng các thành phần tùy chỉnh. Thật không may, việc thảo luận các thuộc tính XML chỉ bao gồm việc khai báo điều khiển bên trong tệp sơ đồ bố trí và không thực sự xử lý các giá trị bên trong khởi tạo lớp. Các bước thực hiện như sau:
Declare thuộc tính trong giá trị \ attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyCustomView">
<attr name="android:text"/>
<attr name="android:textColor"/>
<attr name="extraInformation" format="string" />
</declare-styleable>
</resources>
Thông báo việc sử dụng một cái tên không đủ tiêu chuẩn trong thẻ khai báo-styleable. Thuộc tính android không chuẩn như extraInformation cần phải khai báo kiểu của chúng. Các thẻ được khai báo trong lớp cha sẽ có sẵn trong các lớp con mà không cần phải được redeclared.
Tạo constructors
Vì có hai nhà xây dựng có sử dụng một AttributeSet cho khởi động, nó là thuận tiện để tạo ra một phương pháp khởi động riêng biệt cho các nhà thầu để gọi.
private void init(AttributeSet attrs){
TypedArray a=getContext().obtainStyledAttributes(attrs,R.styleable.MyCustomView);
//Use a
Log.i("test",a.getString(R.styleable.MyCustomView_android_text));
Log.i("test",""+a.getColor(R.styleable.MyCustomView_android_textColor, Color.BLACK));
Log.i("test",a.getString(R.styleable.MyCustomView_android_extraInformation));
//Don't forget this
a.recycle();
}
R.styleable.MyCustomView là tài nguyên int autogenerated trong đó mỗi phần tử là ID của thuộc tính. Các thuộc tính được tạo cho mỗi thuộc tính trong XML bằng cách gắn thêm tên thuộc tính vào tên phần tử. Các thuộc tính sau đó có thể được lấy ra từ TypedArray bằng cách sử dụng các hàm get khác nhau. Nếu thuộc tính không được định nghĩa trong XML, thì null được trả về. Ngoại trừ, tất nhiên, nếu kiểu trả về là nguyên thủy, trong trường hợp đó đối số thứ hai được trả về.
Nếu bạn không muốn truy xuất tất cả thuộc tính, có thể tạo mảng này theo cách thủ công. ID cho thuộc tính android chuẩn được bao gồm trong android.R.attr, trong khi thuộc tính cho dự án này nằm trong R. attr.
int attrsWanted[]=new int[]{android.R.attr.text, R.attr.textColor};
Xin lưu ý rằng bạn không nên sử dụng bất kỳ thứ gì trong android.R.styleable, theo chủ đề này, nó có thể thay đổi trong tương lai. Nó vẫn còn trong tài liệu như là để xem tất cả các hằng số ở một nơi là hữu ích.
Sử dụng nó trong một file bố trí như bố trí \ main.xml Bao gồm việc khai báo namespace
xmlns: Ứng dụng = "http://schemas.android.com/apk/res/com.mycompany .projectname "
trong phần tử xml cấp cao nhất.
<com.mycompany.projectname.MyCustomView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="Test text"
android:textColor="#FFFFFF"
app:extraInformation="My extra information";
/>
Tham chiếu chế độ xem tùy chỉnh bằng cách sử dụng tên đầy đủ.
Android LabelView mẫu
Nếu bạn muốn có một ví dụ hoàn chỉnh, nhìn vào mẫu xem nhãn android.
LabelView.java
TypedArray a=context.obtainStyledAttributes(attrs, R.styleable.LabelView);
CharSequences=a.getString(R.styleable.LabelView_text);
attrs.xml
<declare-styleable name="LabelView">
<attr name="text"format="string"/>
<attr name="textColor"format="color"/>
<attr name="textSize"format="dimension"/>
</declare-styleable>
custom_view_1.xml
<com.example.android.apis.view.LabelView
android:background="@drawable/blue"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:text="Blue"app:textSize="20dp"/>
này được chứa trong một LinearLayout với một thuộc tính namespace:
xmlns: Ứng dụng = "http: // schemas.android.com/apk/res/com.example.android.apis "
Bạn có thể tham khảo mẫu tốt tại đây: [http://www.sgoliver.net/blog/?p=1457](http://www.sgoliver.net/blog/?p=1457) –
Tôi có tương tự nhu cầu .. có bạn có những gì bạn cần. .share một số mã plz – Nepster