2013-07-24 17 views
7

Tôi muốn tạo kiểu sử dụng màu nền android textColorPrimary làm màu nền. Tôi đã thử những điều sau không hoạt động, kết quả là bố cục của tôi không được hiển thị.Làm thế nào để sử dụng textColorPrimary làm màu nền trong một kiểu?

<style name="horizontalLine"> 
    <item name="android:layout_width">fill_parent</item> 
    <item name="android:layout_height">1dp</item> 
    <item name="android:background">?android:attr/textColorPrimary</item> 
</style> 

Làm cách nào để sử dụng textColorPrimary làm màu nền trong một kiểu?

+0

truy vấn tương tự đã được nêu ra [link] (http://stackoverflow.com/questions/5850597/consistent-ui- color-in-all-android-devices) Ở đây Hy vọng nó hữu ích cho bạn – Ashish

+0

@ Aishish: không có gì, các câu hỏi khác muốn biết cách thiết lập màu nói chung, tôi muốn biết cách sử dụng textColorPrimary như màu backgronud . – johannes

+0

Bạn có thể lấy màu theo cách thủ công bằng cách làm như sau: 'textView.getCurrentTextColor();' và lấy màu này từ một TextView sử dụng nó. Nếu bạn muốn kiểm soát việc sử dụng màu này: ' # FFFFFF' cho màu đen chẳng hạn OR ''. Cho tôi biết nếu đó là những gì bạn muốn làm. – g00dy

Trả lời

0

Tôi lấy nó mà bạn muốn sử dụng màu văn bản chính của android.

<item name="android:background">@android:color/primary_text_dark</item> 
6

Cú pháp này dường như làm việc cho tôi, khi cố gắng sử dụng các thuộc tính:

<TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:textColor="?android:textColorPrimary" 
     android:text="Hello"/> 

(hoặc)

<style name="MyStyle"> 
    <item name="android:textColor">?android:textColorPrimary</item> 
</style> 

tôi có thể thay đổi chủ đề ứng dụng từ Holo để Holo.Light và màu văn bản sẽ tự động thay đổi để vừa.

Tính năng này không hoạt động khi tôi đặt làm nền của Chế độ xem - Android sẽ gặp sự cố khi khiếu nại là danh sách trạng thái không chỉ định đối tượng có thể kéo (đó là state list of colors).

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: <item> tag requires a 'drawable' attribute or child tag defining a drawable 
    at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178) 
    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:885) 
    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822) 
    at android.content.res.Resources.loadDrawable(Resources.java:1950) 
    ... 39 more 

Tôi đang sử dụng HoloEverywhere cho phép tôi tham khảo tài nguyên trực tiếp, nhưng bạn sẽ gặp phải sự cố tương tự trong trường hợp gốc. Tôi không nghĩ rằng màu chính, không được chọn, không kích hoạt (vv) được sử dụng như một thành phần trong danh sách trạng thái xml được hiển thị thông qua một thuộc tính.

Trong mọi trường hợp, màu văn bản được sử dụng phụ thuộc vào chủ đề mà bạn, nhà phát triển ứng dụng, chọn. Nếu bạn chọn sử dụng chủ đề Holo (tối) thì văn bản của bạn sẽ có màu sáng và người dùng sẽ không thể ảnh hưởng đến điều này. Bạn không cần phải làm cho màu đường của bạn động cho ứng dụng của bạn.

+1

Vì vậy, làm cách nào để sử dụng nó làm màu nền? – johannes

2

Thông báo lỗi tôi nhận được cho việc này là:

org.xmlpull.v1.XmlPullParserException: Binary XML file line #18: <item> tag requires a 'drawable' attribute or child tag defining a drawable 

Làm một chút đào, các thông số kỹ thuật nói thuộc tính background nên hỗ trợ hoặc là một màu, hoặc tham chiếu đến một tài nguyên drawable:

.. Nhìn vào tài nguyên bạn đang tham chiếu, nó a StateListDrawable.

platforms/android-17/data/res/color/primary_text_dark.xml 

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false" android:color="@android:color/bright_foreground_dark_disabled"/> 
    <item android:state_window_focused="false" android:color="@android:color/bright_foreground_dark"/> 
    <item android:state_pressed="true" android:color="@android:color/bright_foreground_dark_inverse"/> 
    <item android:state_selected="true" android:color="@android:color/bright_foreground_dark_inverse"/> 
    <item android:state_activated="true" android:color="@android:color/bright_foreground_dark_inverse"/> 
    <item android:color="@android:color/bright_foreground_dark"/> <!-- not selected --> 
</selector> 

Tuy nhiên, các tài liệu cho StateListDrawable cũng dứt khoát nói thuộc tính drawable phải được xác định cho item yếu tố:

https://developer.android.com/guide/topics/resources/drawable-resource.html 

<item> 
    Defines a drawable to use during certain states, as described by its attributes. Must be a child of a <selector> element. 

    attributes: 

    android:drawable 
     Drawable resource. Required. Reference to a drawable resource. 

... mà không phải là trường hợp đối với trường hợp cho primary_text_dark.xml. Vì vậy, nó không làm việc vì drawable bạn đang tham khảo dường như không phù hợp với spec.

Tôi nghĩ rằng giải pháp thay thế là để tham chiếu màu được sử dụng trong primary_text_dark cho trạng thái mặc định: bright_foreground_dark.Thấy rằng không công khai, bạn cần truy cập trực tiếp vào tài liệu tham chiếu, nghĩa là:

android:background="@android:color/background_light" 
Các vấn đề liên quan