2012-08-13 10 views
10

Tôi có thể vẽ như thế này:Drawable.setState() Làm cách nào để kiểm soát trạng thái cụ thể của đối tượng có thể vẽ?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_pressed="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_pressed" /> 

<item android:state_focused="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_selected" /> 

<item android:state_selected="true" 
     android:state_window_focused="true" 
     android:drawable="@drawable/seek_thumb_selected" /> 

<item android:drawable="@drawable/seek_thumb_normal" /> 

Trong mã, làm thế nào để thiết lập nhà nước cụ thể drawable của tôi? Tôi muốn đặt nó thành state_pressed = true state.

Trả lời

19

OK. Nhận xét từ đây đã giúp: Android : How to update the selector(StateListDrawable) programmatically

Vì vậy, Drawable.setState() lấy một mảng theo số nguyên. Các số nguyên này đại diện cho trạng thái của đối tượng có thể vẽ được. Bạn có thể vượt qua bất kỳ ints bạn muốn. Khi ints pass trùng khớp với một "item" từ danh sách trạng thái, hãy rút ra các draw draw drawable trong trạng thái đó.

Nó làm cho ý nghĩa hơn trong mã:

int[] state = new int[] {android.R.attr.state_window_focused, android.R.attr.state_focused}; 
minThumb.setState(state); 

Chú ý rằng danh sách nhà nước drawable của tôi có cả các state_pressed="true"android:state_window_focused="true". Vì vậy, tôi phải chuyển cả hai giá trị int đó vào setState. Khi tôi muốn xóa nó, tôi chỉ cần minThumb.setState(new int[]{});

+0

gì nếu quan điểm hiện tại không có một nền tảng, và cần phải thông báo cho con của nó về trạng thái của nó (vì họ có android: duplicateParentState = "true")? bạn sẽ thay đổi trạng thái của chế độ xem như thế nào? –

+4

"Nó có ý nghĩa hơn trong mã" - không có gì liên quan đến các trạng thái có thể vẽ được ... – milosmns

4

Không có đủ điểm để nhận xét, vì vậy đây chỉ là sự bổ sung cho những gì nhà phát triển Android cho biết. Đối với một số trạng thái nhất định như state_enabled, không có cách rõ ràng nào để đặt giá trị ngược lại của trạng thái đó (ví dụ: không có state_disabled). Để biểu thị trạng thái phủ định hoặc đối diện, chỉ cần chuyển giá trị âm của tài nguyên cho trạng thái đó.

int[] state = new int[] {-android.R.attr.state_enabled}; //Essentially state_disabled 

Sau đó chuyển mảng số nguyên đó vào phương thức setState() như bình thường.

minThumb.setState(state); 
+0

Hoặc, bạn chỉ có thể bỏ qua trạng thái đó khỏi mảng ... – vaughandroid