2013-04-11 45 views
6

Tôi đang tạo SpinnerAdapter bằng cách sử dụng được xây dựng trong nguồn ID android.R.layout.simple_spinner_dropdown_itemLàm cách nào để thay đổi màu của textView android.R.layout.simple_spinner_dropdown_item?

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item); 

nhưng TextView mà rằng ID tài nguyên tạo ra có Format Đen và tôi cần một màu sắc khác nhau. Cách tốt nhất để thay đổi màu sắc nhưng giữ mọi thứ khác giống nhau là gì?

Khi tôi cố gắng tạo tài nguyên bố cục textView của riêng mình trong tệp xml, ví dụ:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/White" 
    /> 

thì nó không hoạt động giống như android.R.layout.simple_spinner_dropdown_item vì ví dụ: padding là khác nhau. Vì vậy,

  1. Có cách nào để tạo tài nguyên bố cục của riêng tôi trong tệp xml kế thừa mọi thứ từ android.R.layout.simple_spinner_dropdown_item và cho phép tôi ghi đè textColor không?
  2. Hoặc là định nghĩa đầy đủ của android.R.layout.simple_spinner_dropdown_item có ở đâu đó?
  3. Hoặc có lẽ có một cách dễ dàng hơn bằng cách nào đó?

Câu hỏi này liên quan đến một câu hỏi khác mà tôi đã hỏi hôm nay (Can't change the text color with Android Action Bar drop-down navigation). Tôi đã nhận ra rằng một câu trả lời cho câu hỏi đó (và do đó câu hỏi này) là tạo ra lớp ArrayAdapter của riêng tôi kế thừa từ ArrayAdapter<T> để tôi luôn có thể đặt màu trong mã bất cứ khi nào ArrayAdapter được sử dụng (xem câu trả lời của tôi cho câu hỏi đó) . Nhưng điều đó có vẻ như một giải pháp rất cồng kềnh: - |.

Thay đổi màu văn bản không phải là một nhiệm vụ khó!

Trả lời

8

Is there a way of creating my own layout resource in an xml file which inherits everything from android.R.layout.simple_spinner_dropdown_item and allows me to override the textColor?

Không, nhưng bạn có thể cắt dán & phiên bản yêu thích của bạn simple_spinner_dropdown_item.xml vào một tập tin mới sau đó chỉ cần thay đổi màu sắc văn bản.

Or is the complete definition of android.R.layout.simple_spinner_dropdown_item available somewhere?

Có, nhưng có nhiều phiên bản khác nhau. Bạn thích API nào? Ngoài ra bạn có thể có một bản sao trên ổ cứng của bạn đã có, kiểm tra <android-sdk>/platforms/android-xx/data/res/layout/ (nơi xx là một API cụ thể.)


Là một phương pháp thay thế bạn có thể tạo một Adapter tùy chỉnh và thay đổi màu sắc văn bản sau khi bạn thổi phồng mỗi hàng , nhưng phương pháp trên sẽ nhanh hơn một chút vì nó không liên quan đến bất kỳ thay đổi thời gian chạy nào.

+0

thx vm :-). Trong thực tế, tôi đã tìm thấy cách tiếp cận thay thế của bạn, nhưng bây giờ bạn đã nói với tôi nơi để tìm các defintions xml tôi có thể sẽ chuyển sang đó. – Stochastically

+0

+1 cho dòng suy nghĩ của bạn ... Tôi đã thêm vào giải pháp của bạn vì điều này sẽ không hoạt động ngay lập tức mà không có thay đổi. – whyoz

0

Nếu không sử dụng bộ chuyển đổi tùy chỉnh nó là không thể thay đổi màu sắc của

android.R.layout.simple_spinner_dropdown_item 

Better tạo ra một bộ chuyển đổi tùy chỉnh và sau đó bạn có thể thay đổi màu sắc, testSixe, textStyle vv

+0

tốt, nếu bạn làm những gì Sam nói để làm, sau đó bạn có thể chỉnh sửa simple_spinner_dropdown_item.xml ... – whyoz

9

Để mở rộng của Sam giải pháp, bạn sẽ cần phải sửa đổi tệp theo những cách rất cụ thể để ghi đè kiểu của Android.

Sau khi bạn sao chép simple_spinner_dropdown_item.xml từ thư mục sdk vào thư mục bố trí chính xác bạn đang làm việc với, bạn sẽ thấy mã này:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@android:id/text1" 
style="?android:attr/spinnerDropDownItemStyle" 
android:singleLine="true" 
android:layout_width="match_parent" 
android:layout_height="?android:attr/dropdownListPreferredItemHeight" 
android:ellipsize="marquee" /> 

Để thay đổi hình nền của TextView và tránh lỗi này:

.../res/layout/simple_spinner_dropdown_item.xml:20: error: Error: Attribute is not public. (at 'layout_height' with value '?android:attr/dropdownListPreferredItemHeight').

mã của bạn sẽ cần phải xem xét như thế này:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/spinnerText" 
style="@style/SpinnerTextViewItem" 
android:singleLine="true" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:ellipsize="marquee" /> 

Sự thay đổi chính khác cần phải thực hiện là tạo ra phong cách riêng của bạn. Bạn có thể có một tập tin styles.xml, vì vậy thêm một phong cách mới tương tự như sau:

<style name="SpinnerTextViewItem" parent="@android:style/Widget.TextView" > 
    <item name="android:textStyle">normal</item> 
    <item name="android:background">@color/green</item> 
</style> 

Giả sử bạn có một cái gì đó trong file colors.xml, bạn có thể thiết lập các màu sắc qua "@ màu/xanh" hay bất cứ điều gì màu bạn chọn (tất nhiên bạn có thể sử dụng @android: color/...) chưa kể tất cả các mục khác mà bạn có thể thêm để thay đổi TextView.

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