2010-07-01 32 views
5

Tôi có một ứng dụng yêu cầu bật thanh cuộn theo một hướng ngang chứ không phải theo hướng dọc. Tôi nghĩ cách dễ nhất để làm điều này là tạo một thuộc tính cho biết thanh cuộn có được bật hay không, chẳng hạn như sau:Tham chiếu các thuộc tính kiểu được liệt kê từ XML trong Android

<ScrollView 
     a:layout_width="fill_parent" 
     a:layout_height="fill_parent" 
     a:scrollbars="?my_activity_scrollbars" 
     a:fadingEdge="none" 
     > 

Sau đó tôi xác định các giá trị riêng biệt cho chế độ ngang và dọc. Dường như dễ dàng.

Vì vậy, tôi sau đó được xác định thuộc tính này trong attrs.xml:

<resources> 
    <declare-styleable name="Theme"> 
    <attr name="my_activity_scrollbars" format="enum" /> 
    </declare-styleable> 
</resources> 

Và thêm nó vào styles.xml ứng dụng của tôi:

<style name="MyApp" parent="@android:style/Theme.Light"> 
    <item name="add_credit_card_scrollbars">none</item> 
</style> 

Tuy nhiên, khi tôi cố gắng để biên dịch ứng dụng của tôi, tôi nhận được lỗi sau:

styles.xml:8: error: Error: String types not allowed (at 'my_activity_scrollbars' with value 'none'). 

Có vẻ như rõ ràng rằng nó xử lý "không" dưới dạng chuỗi thay vì giá trị được liệt kê. Thay vì sử dụng "không", tôi đã thử những thứ như "? Android: attr/scrollbars/none", "? Android: attr/none", v.v. nhưng những thứ đó không hoạt động.

Làm cách nào tôi có thể chỉ định giá trị "không" là giá trị được liệt kê thay vì chuỗi?

Trả lời

11

Tôi tin rằng bạn đã định nghĩa attr bạn đặt không chính xác:

Đây là một enum attr từ nguồn android:

<attr name="ellipsize"> 
    <enum name="none" value="0" /> 
    <enum name="start" value="1" /> 
    <enum name="middle" value="2" /> 
    <enum name="end" value="3" /> 
    <enum name="marquee" value="4" /> 
</attr> 

Có vẻ bạn không xác định format="enum" và thay vào đó chỉ định các giá trị enum trong attr chính thẻ.

+0

Đó là hoàn toàn đúng, nhờ Qberticus – emmby

+2

Để làm rõ, tôi đã thay đổi attrs.xml tôi cho ' '(sao chép các giá trị liệt kê từ $ ANDROID_SDK/nền tảng/android - */data/res/values ​​/ attrs.xml) và mọi thứ hoạt động tốt. – emmby

+0

@emmby Cảm ơn bạn rất nhiều vì câu hỏi của bạn và ở trên nhận xét. Nhưng tôi thích các giá trị số nguyên hơn giá trị hex :-) - cảm ơn một lần nữa! –

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