2011-01-03 8 views
39

Làm cách nào để thay đổi màu lấy nét (màu cam) trên hộp EditText? Các màu sắc tập trung là một vành nhỏ xung quanh toàn bộ kiểm soát và sáng màu cam khi điều khiển đã tập trung. Làm thế nào tôi có thể thay đổi màu sắc của rằng tập trung vào một màu khác nhau? Có ai giúp tôi trong việc phân loại vấn đề này không? Cảm ơn trước,cách thay đổi màu tiêu điểm của EditText trong Android

Trả lời

62

Bạn sẽ phải tạo/sửa đổi hình ảnh NinePatch của riêng mình để thay thế hình ảnh mặc định của NinePatch và sử dụng làm nền của EditText. Nếu bạn nhìn vào thư mục SDK của bạn, dưới nền tảng của bạn, sau đó res/drawable, bạn sẽ tìm thấy hình ảnh NinePatch cho trạng thái lấy nét EditText. Nếu đó là tất cả những gì bạn muốn thay đổi, bạn có thể kéo nó vào Photoshop, hoặc bất cứ phần mềm chỉnh sửa hình ảnh nào bạn có, và thay đổi màu cam thành màu bạn chọn. Sau đó lưu đó vào thư mục drawable của bạn, và xây dựng một StateListDrawable mới, ví dụ một cái gì đó giống như dưới đây:

edittext_modified_states.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <item 
     android:state_pressed="true" 
     android:drawable="@android:drawable/edittext_pressed" 
     /> <!-- pressed -->  
    <item 
     android:state_focused="true" 
     android:drawable="@drawable/edittext_focused_blue" 
     /> <!-- focused -->  
    <item 
     android:drawable="@android:drawable/edittext_normal" 
     /> <!-- default --> 
</selector> 

tôi không biết ăn nói lấc cấc tên thực tế cho NinePatches mặc định cho EditText, vì vậy hãy thay thế chúng khi cần thiết, nhưng khóa ở đây là chỉ sử dụng các hình ảnh @android:drawable cho những ảnh bạn chưa sửa đổi (hoặc bạn có thể sao chép chúng vào thư mục có thể vẽ của dự án), và sau đó sử dụng trạng thái tập trung của bạn.

Sau đó bạn có thể thiết lập StateListDrawable này như là nền tảng cho TextView của mình, như vậy:

<TextView 
    android:background="@drawable/edittext_modified_states" 
+0

Giải pháp này hoạt động trên phiên bản Android nào? Tôi đã cố gắng để thay đổi màu sắc trong Android 2.1, nhưng có vẻ như rằng các tên và các tập tin xml là khác nhau trong nó. Tôi hiểu ý tưởng, nhưng sự thất vọng đang tăng lên khi tôi phải đối mặt với hàng tấn lỗi tất cả thời gian. – zaplec

+0

Trong phiên bản 2.1, tôi cũng phải sao chép các ảnh trạng thái chưa sửa đổi thông thường vào thư mục drawable của ứng dụng để có được tác phẩm này. Vì vậy, trong các ứng dụng của tôi drawable thư mục tôi có hình ảnh trạng thái tập trung sửa đổi và cũng unmodified ban đầu khác hình ảnh nhà nước là tốt. Bây giờ nó hoạt động. – zaplec

+0

Nó có thể không hoạt động, như tôi đã nói bạn có thể phải sao chép chúng vào thư mục của bạn (vì có vẻ như bạn đã làm); đây chỉ là một giải pháp từ đỉnh đầu tôi. :) – kcoppock

0
<?xml version="1.0" encoding="utf-8"?> 
<selector 
xmlns:android="http://schemas.android.com/apk/res/android" 
> 
    <item 
     android:state_pressed="true" 
     android:color="colorcode" 
    /> <!-- pressed -->  
    <item 
     android:state_focused="true" 
     android:color="colorcode" 
    /> <!-- focused -->  
    <item 
      android:color="colorcode" 
    /> <!-- default --> 
</selector> 
+1

mã này không hoạt động cho tôi thấy lỗi này "02-07 03: 45: 01.131: E/AndroidRuntime (2911): Gây ra bởi: org.xmlpull.v1.XmlPullParserException: Dòng tệp nhị phân XML # 8: thẻ yêu cầu thuộc tính 'có thể kéo' hoặc thẻ con xác định một hình vẽ có thể drawable " – andrewww

+0

" 'thay vì' android: color' – sent1nel

+0

@andrewww tạo color.xml trong ' thư mục res/color' và thử 'android: color =" @ color/colorname "' –

0

Bạn không cần phải tạo drawables xml. Nó có thể đơn giản hơn trong mã. Ví dụ về kotlin:

editText.onFocusChangeListener = OnFocusChangeListener { _, hasFocus -> 
    // colorLine, colorLineFocus is vars of ColorStateList 
    ViewCompat.setBackgroundTintList(editText, if (hasFocus) colorLineFocus else colorLine) 
}