2012-08-29 49 views
10

Tôi có đoạn code sauThay đổi màu sắc được sử dụng trong dòng listSeparatorTextViewStyle

 <TextView 
      android:text="@string/hello" 
      style="?android:attr/listSeparatorTextViewStyle" /> 

và tôi sẽ có được hiệu quả sau đây.

enter image description here

Tuy nhiên, tôi không hài lòng với vạch màu. Tôi muốn có một cái gì đó giống như

enter image description here

Tôi muốn nó có dòng màu xanh như trong holo. Tôi thử kiểu tùy chỉnh sau.

<style name="MyOwnListSeperatorTextViewStyle">   
<item name="android:background">@android:drawable/list_section_divider_holo_light</item>   
<item name="android:textAllCaps">true</item>  

<!-- Copy from Widget.TextView.ListSeparator --> 

<item name="android:background">@android:drawable/dark_header_dither</item> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textColor">?textColorSecondary</item> 
    <item name="android:textSize">14sp</item> 
    <item name="android:gravity">center_vertical</item> 
    <item name="android:paddingLeft">8dip</item>   
</style> 

Nhưng nó sẽ không hoạt động, vì tôi gặp lỗi sau.

lỗi: Lỗi: Tài nguyên không công khai. (tại 'android: background' với giá trị '@android: drawable/dark_header_dither').

có ý tưởng làm thế nào tôi có thể thay đổi màu đường được sử dụng trong listSeparatorTextViewStyle?

+0

Bạn đã cố gắng triển khai giải pháp của mình chưa? Tôi hy vọng nó hoạt động! –

+0

Xin lỗi. Tôi đã không cố gắng ra được nêu ra như những vài tuần tôi bận rộn với các chất liệu khác. Chắc chắn sẽ cập nhật chủ đề này một khi tôi đã thử. –

Trả lời

15

tôi cần phải làm điều này để ghi đè lên các điển hình phong cách Holo Spinner (Tôi không muốn các mục được gạch dưới - tôi chỉ muốn vào mũi tên), và tôi nghĩ rằng điều này có thể được ghi đè trong một cách chính xác theo cách tương tự:

Trước hết, bạn muốn tìm mục bạn muốn ghi đè trong nguồn kiểu Android. Có một cực kỳ hữu ích SO trả lời có chứa tất cả các phong cách (và tên để ghi đè lên chúng) ngay tại đây: Set Dialog theme to parent Theme in Android

Tôi tin rằng bạn là dòng sau:

<item name="listSeparatorTextViewStyle">@android:style/Widget.Holo.Light.TextView.ListSeparator</item> 

này đưa chúng ta vào một cuộc hành trình để tìm ra phong cách Widget.Holo.Light.TextView.ListSeparator nên sống ở đâu đó trên máy tính của chính bạn! Nhưng tôi sẽ làm cho nó dễ dàng và chỉ c & p nó:

<style name="Widget.Holo.Light.TextView.ListSeparator" parent="Widget.TextView.ListSeparator"> 
    <item name="android:background">@android:drawable/list_section_divider_holo_light</item> 
</style> 

Bây giờ, bạn có thể muốn để lại cũng đủ một mình, và chỉ nhìn vào đó drawable nền. Bạn sẽ tìm thấy nó là một tập tin 9patch màu xám trông giống như dòng màu xám nham hiểm mà bạn tìm cách tránh.

Chúng tôi cần ghi đè điều này. Tôi chắc chắn có một số cách để làm điều này, nhưng tôi làm như vậy bằng cách tùy biến chủ đề của ứng dụng. Dưới đây là file themes.xml:

<style name="AppTheme" parent="@android:style/Theme.Holo.Light.NoActionBar"> 
    <item name="android:listSeparatorTextViewStyle">@style/MyOwnListSeperatorTextViewStyle</item> 
</style> 

<style name="MyOwnListSeperatorTextViewStyle" parent="Widget.TextView.ListSeparator"> 
    <item name="android:background">@drawable/make_your_own_blue_9_patch_here</item> 
</style> 

Chú ý cách chúng tôi sử dụng listSeparatorTextViewStyle từ mà trước SO gửi? Và phụ huynh của phong cách tùy chỉnh là Widget.TextView.ListSeparator từ nguồn phong cách của Android? Tất cả đều rất quan trọng.

Bây giờ bạn chỉ cần áp dụng chủ đề này cho ứng dụng của mình, nhưng tôi cho rằng bạn đã có một chủ đề rồi. Nếu bạn chưa có, bạn sẽ cần phải tạo 9patch của riêng mình nhưng tôi sẽ chỉ xem tệp list_section_divider_holo_light.9.png trên máy tính của bạn và làm cho các phần màu xám màu xanh, sau đó tạo một bản sao và đặt nó vào thư mục drawables của riêng bạn.

Hy vọng công trình này hữu ích!

+11

Tôi nhận được lỗi sau: Lỗi khi truy xuất cấp độ gốc cho mục: Không tìm thấy tài nguyên nào khớp với tên đã cho '@android: style/Widget.TextView.ListSeparator'. \t styles.xml –

+0

Tôi không chắc chắn điều này tạo ra bất kỳ sự khác biệt nào nhưng tôi không có ký hiệu '@' trước "android" khi chỉ định kiểu gốc –

+1

Xin chào! Im có cùng một vấn đề, nhưng khi tôi thử giải pháp của bạn, cũng như nhiều người khác ở đây trong SO, nền của toàn bộ TextView được thay đổi, thay vì chỉ thay đổi dòng. Bất kỳ ý tưởng những gì tôi đang làm sai? – acrespo

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