Có này xem tùy chỉnh MyView
tôi xác định các thuộc tính một số tùy chỉnh:Nhận id nguồn lực cho các tài liệu tham khảo có thể vẽ được sử dụng trong theo kiểu thuộc tính
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="normalColor" format="color"/>
<attr name="backgroundBase" format="integer"/>
</declare-styleable>
</resources>
Và gán chúng như sau trong cách bố trí XML:
<com.example.test.MyView
android:id="@+id/view1"
android:text="@string/app_name"
. . .
app:backgroundBase="@drawable/logo1"
app:normalColor="@color/blue"/>
Lúc đầu, tôi nghĩ rằng tôi có thể truy xuất thuộc tính tùy chỉnh backgroundBase
sử dụng:
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0);
int base = a.getInteger(R.styleable.MyView_backgroundBase, R.drawable.blank);
Chỉ hoạt động khi thuộc tính không được gán và mặc định R.drawable.blank
được trả về.
Khi app:backgroundBase
được gán một ngoại lệ được ném "Không thể chuyển đổi để nguyên type = 0xn" bởi vì, mặc dù định dạng thuộc tính tùy chỉnh tuyên bố nó như là số nguyên, nó thực sự tham khảo một Drawable
và cần được lấy ra như sau:
Drawable base = a.getDrawable(R.styleable.MyView_backgroundBase);
if(base == null) base = BitMapFactory.decodeResource(getResources(), R.drawable.blank);
Và tính năng này hoạt động.
Bây giờ câu hỏi của tôi:
Tôi thực sự không muốn để có được những Drawable
từ TypedArray, tôi muốn các số nguyên id tương ứng với app:backgroundBase
(trong ví dụ trên nó sẽ là R.drawable.logo1
). Làm thế nào tôi có thể nhận được nó?
một số giải thích mà có thể đã giúp tôi: 'cái R.drawable.blank' là tài nguyên mặc định trong trường hợp một trong những yêu cầu không tồn tại – HaydenKai