2012-05-17 35 views
8

Tôi có chế độ xem tùy chỉnh mở rộng một trong các lớp khung. Hầu hết các View s trong Android có một số thuộc tính mặc định được xác định cho chúng (chẳng hạn như Button có thể nhấp được, được đặt bởi android:clickable="true").Android: Thuộc tính mặc định cho chế độ xem tùy chỉnh

Làm cách nào để cung cấp mặc định cho toàn bộ ứng dụng cho chế độ xem tùy chỉnh của tôi?

+0

http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml – Ixx

+0

Tôi không hỏi về cách xác định thuộc tính tùy chỉnh. Tôi đã làm điều đó. Những gì tôi muốn là có một số ** mặc định ** được định nghĩa cho các thuộc tính đó để khung nhìn có thể được thêm vào một tệp bố trí mà không cần phải thiết lập một số thuộc tính bổ sung. – Karakuri

Trả lời

12

tôi giải quyết vấn đề của riêng tôi thusly:

res/values ​​/ attrs.xml:

<resources> 
    <attr name="customViewStyle" type="reference" /> 
</resources> 

res/values ​​/ styles.xml:

<resources> 
    <style name="AppTheme" parent="@android:style/Theme.Light"> 
     <item name="android:background">@drawable/bg_light</item> 
     <item name="customViewStyle">@style/CustomView</item> 
    </style> 

    <style name="CustomView"> 
     <item name="android:clickable">true</item> 
     <item name="android:focusable">true</item> 
     <item name="android:focusableInTouchMode">true</item> 
    </style> 
</resources> 

Sau đó, tất cả những gì bạn làm là đặt chủ đề trong tệp kê khai thành AppTheme. Điều này cũng hoạt động với các tiện ích chuẩn sử dụng android:[widget]Style thay cho customViewStyle trong định nghĩa của AppTheme.

+2

Làm thế nào điều này được áp dụng cho chế độ xem của bạn? CustomViewStyle được liên kết với triển khai Chế độ xem của bạn ở đâu? – cottonBallPaws

+1

@cottonBallPaws, thông tin sau chỉ cho tôi đúng hướng: http://stackoverflow.com/a/31505624/5166250 – Travis

1

Bạn cũng có thể tạo kiểu cho bố cục này và đặt kiểu bạn sử dụng chế độ xem.

nguồn: http://developer.android.com/guide/topics/resources/style-resource.html

+2

Sử dụng thẻ kiểu chỉ là một phím tắt để cài đặt các thuộc tính riêng lẻ trong tệp bố cục - đó không phải là những gì tôi đang cố gắng thực hiện. Tôi muốn có một số giao diện/thuộc tính mặc định và sau đó bất kỳ ai đang sử dụng chế độ xem tùy chỉnh của tôi đều có thể sử dụng thẻ kiểu để sửa đổi thêm. Hãy suy nghĩ theo cách này: Khi bạn thêm TextView vào bố cục, nó có mặc định cho kích thước văn bản, màu văn bản, v.v. Phải đến từ đâu đó, vì bạn không phải chỉ định kiểu hoặc bất kỳ thứ gì. Các thuộc tính mà bạn thay đổi hoặc kiểu bạn tham chiếu sẽ được áp dụng trên các giá trị mặc định đó. – Karakuri

0

Tôi nghĩ rằng bạn sẽ cần phải ghi đè View nhà xây dựng mà phải mất một cuộc tranh cãi AttributeSet, và xây dựng AttributeSet sửa đổi của riêng bạn để vượt qua các nhà xây dựng lớp cha.

EDIT: Thậm chí dễ dàng hơn, chỉ cần có hàm tạo lớp con Xem của bạn, hãy gọi setClickable v.v. để thay đổi giá trị mặc định thành những gì bạn muốn.

+3

Đây là những gì tôi đã làm ban đầu. Vấn đề là, nếu một nhà phát triển khác sử dụng chế độ xem tùy chỉnh của tôi và đặt clickable = "false" trong xml của mình, thì lệnh gọi của tôi tới 'setClickable()' sẽ làm hỏng chương trình của anh ấy. (Có thể anh ta định làm cho nó có thể nhấp chỉ sau khi người dùng đã làm gì đó, như đánh dấu chọn hộp kiểm.) Mặc dù ** tôi ** mong đợi nó có thể nhấp được, những người khác có thể không, vì vậy tôi muốn cung cấp một số mặc định hành vi mà không cần đến các cuộc gọi nội bộ như vậy. Nếu không, tôi cần một cách để đọc tất cả các thuộc tính cho khung nhìn, không chỉ các thuộc tính tùy chỉnh mà tôi đã định nghĩa trong attrs. – Karakuri

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