Câu hỏi này được hỏi ở rất nhiều nơi theo nhiều cách khác nhau. Ban đầu tôi đã trả lời nó ở đây nhưng tôi cảm thấy nó cũng có liên quan trong chủ đề này (vì tôi đã kết thúc ở đây khi tôi đang tìm kiếm một câu trả lời).
Không có giải pháp một dòng cho vấn đề này, nhưng điều này đã làm việc cho trường hợp sử dụng của tôi. Vấn đề là, hàm tạo 'View (bối cảnh, attrs, defStyle)' không đề cập đến một kiểu thực tế, nó muốn một thuộc tính. Vì vậy, chúng tôi sẽ:
- Xác định một thuộc tính
- Tạo một phong cách mà bạn muốn sử dụng
- Áp dụng một kiểu cho thuộc tính đó vào chủ đề của chúng tôi
- Tạo phiên bản mới của quan điểm của chúng tôi với thuộc tính đó
Trong 'res / value / attrs.xml', xác định một thuộc tính mới:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
Trong res / value / style.xml 'Tôi sẽ tạo kiểu tôi muốn sử dụng trên TextView tùy chỉnh của mình
<style name="CustomTextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">14dp</item>
</style>
Trong 'res / value / Themes.xml' hoặc 'res / value / Styles.xml', sửa đổi chủ đề cho ứng dụng / hoạt động của bạn và thêm kiểu sau:
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
Cuối cùng, trong TextView tùy chỉnh của bạn, bây giờ bạn có thể sử dụng hàm tạo với thuộc tính và nó sẽ nhận được kiểu của bạn
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
Điều đáng chú ý là tôi liên tục sử dụng customTextView trong các biến thể khác nhau và các địa điểm khác nhau, nhưng không có cách nào để tên của chế độ xem khớp với kiểu hoặc thuộc tính hoặc bất cứ thứ gì. Ngoài ra, kỹ thuật này sẽ hoạt động với bất kỳ chế độ xem tùy chỉnh nào, không chỉ TextViews.