2011-09-01 30 views
19

Tôi có một EditText rất đơn giản, như sau:Android EditText.setError() mang lại văn bản lỗi vô hình

<EditText 
    android:id="@+id/myedit" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" 
    android:maxLength="32"/> 

Trong một số mã xác nhận, tôi sử dụng Android của EditText.setError() để hiển thị bất kỳ lỗi xác nhận. Điều này làm việc tốt trong OS 2.x nhưng không phải trên một thiết bị OS 3.x (Xoom) - trên Xoom bạn có thể thấy các phác thảo của popup lỗi nhưng bạn không thể nhìn thấy văn bản lỗi.

Tôi đoán rằng văn bản có ở đó, nhưng nó là vô hình. Làm thế nào để làm cho nó có thể nhìn thấy? Tôi không thấy số android:textColor có liên quan đến văn bản lỗi.

Ngoài ra, nếu văn bản thực sự ẩn, thì bất kỳ ý tưởng nào tại sao 2.x hoạt động khác với 3.x - có vẻ như điều này sẽ gây ra sự cố tương thích ngược.

Cảm ơn.

+0

Hình như văn bản là có, nhưng đó là ánh sáng màu xám trên nền trắng vì hoạt động đang sử dụng Theme.Light. – jarmod

Trả lời

48

Dường như bạn có thể giải quyết vấn đề này bằng cách gọi EditText.setError() với đối tượng SpannableStringBuilder chứ không phải là Chuỗi.

int ecolor = xxxx; // whatever color you want 
String estring = "Input is incorrect"; 
ForegroundColorSpan fgcspan = new ForegroundColorSpan(ecolor); 
SpannableStringBuilder ssbuilder = new SpannableStringBuilder(estring); 
ssbuilder.setSpan(fgcspan, 0, estring.length(), 0); 
myedittext.setError(ssbuilder); 
+0

thông minh Trả lời .. – Manivannan

+0

Nó không hoạt động đối với tôi ... – Noman

+0

Làm việc cho tôi ngay bây giờ .... :) – Noman

6

Sử dụng cấp độ gốc parent theme cho mức API thích hợp theo phong cách tùy chỉnh của riêng bạn! "@android: style/theme.name".

Phân biệt chủ đề bởi Configuration qualifier:

value/style.xml - > parent="@android:style/Theme.Light" 
value-v11/style.xml -> parent="@android:style/Theme.Holo.Light" 
value-v14/style.xml -> parent="@android:style/Theme.DeviceDefault.Light" 

http://code.google.com/p/android/issues/detail?id=22920

+3

Cảm ơn, tôi đã sử dụng giải pháp được cung cấp bởi liên kết: Sylphe

+0

Giải pháp này phù hợp với tôi vì giải pháp được chấp nhận luôn sử dụng màu đen (cố định) màu –

4

tôi đã cùng một vấn đề. Trong trường hợp của tôi, tôi đã áp dụng parent = "android: Theme.Light" cho các giá trị-V14/styles.xml. Điều này làm cho điều khiển EditText trông giống như một điều khiển từ Android 2.3.3 và Android dưới đây. Nhưng văn bản thông báo lỗi là tất cả màu trắng và do đó, không hiển thị. Sau khi một số đầu gãi tôi figured này ra.

Thay đổi cấp độ gốc = "android: Theme.Light" thành parent = "android: Theme.Holo.Light.NoActionBar" (bao giờ chủ đề Holo). Nhưng trong định nghĩa EditText thêm android:background="@android:drawable/edit_text"

My EditText trông như thế này

<EditText 
       android:id="@+id/password" 
       style="@style/editTextNormal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/email" 
       android:hint="@string/prompt_password" 
       android:imeActionId="@+id/login" 
       android:imeActionLabel="@string/action_sign_in_short" 
       android:imeOptions="actionUnspecified" 
       android:inputType="textPassword" 
       android:maxLines="1" 
       android:singleLine="true" 
       android:background="@android:drawable/edit_text" /> 
4

Nếu bạn muốn thay đổi màu sắc văn bản của độ xem văn bản lỗi, sau đó bạn nên thêm mã này trong file theme của bạn.

Đối với v8:

<item name="android:textColorSecondaryInverse">@android:color/secondary_text_light</item> 

Đối với v11:

<item name="android:textColorPrimaryInverse">@android:color/primary_text_light</item> 
+0

Điều này phù hợp với tôi. – Alfergon

19

Đối với một giải pháp thanh lịch hơn hãy thử điều này:

editText.setError(Html.fromHtml("<font color='red'>Error Message!</font>")); 
+1

Tôi thích câu trả lời này. – addoil

+1

tốt nhất .... cảm ơn #mostar –

+1

nhưng tôi thử điều này không hoạt động, edtAddr.setError (Html.fromHtml (" Thông báo lỗi!")); – influx

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