20

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ó?

Trả lời

36

Nó chỉ ra rằng câu trả lời là đúng đó:

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0); 
int base = a.getResourceId(R.styleable.MyView_backgroundBase, R.drawable.blank); 
+3

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

Các vấn đề liên quan