2011-01-03 3 views
39

Как изменить цвет фокуса (оранжевый) в окне EditText? Цвет фокуса - это небольшой обод вокруг всего элемента управления и яркий оранжевый, когда элемент управления имеет фокус. Как изменить цвет этого фокуса на другой цвет? Может ли кто-нибудь помочь мне в решении этой проблемы? Заранее спасибо,Как изменить цвет фокуса EditText в Android

ответ

62

Вам нужно будет создать/изменить собственное изображение NinePatch, чтобы заменить его по умолчанию, и использовать его в качестве фона вашего EditText. Если вы посмотрите в свою папку SDK, под вашей платформой, затем res/drawable, вы должны найти изображение NinePatch для состояния фокусировки EditText. Если это все, что вы хотите изменить, вы можете просто вставить его в Photoshop или любое другое программное обеспечение для редактирования изображений и изменить оранжевый цвет на выбранный вами цвет. Затем сохраните, что в вашей вытяжке папку, и построить новый StateListDrawable, например, что-то вроде ниже:

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> 

Я не знаю экспромтом фактических имен NinePatches по умолчанию для EditText, поэтому замените их по мере необходимости, но здесь нужно просто использовать образы @android:drawable для тех, которые вы не изменили (или вы можете скопировать их в выпадающую папку вашего проекта), а затем используйте свой модифицированный для использования для ваше сосредоточенное состояние.

Вы можете установить этот StateListDrawable в качестве фона для вашего TextView, например, так:

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

На каком Android-версии это решение работает? Я попытался изменить цвет в Android 2.1, но кажется, что имена и xml-файлы в нем разные. Я понимаю эту идею, но разочарование растет, так как я постоянно сталкиваюсь с множеством ошибок. – zaplec

+0

В 2.1 мне пришлось копировать также нормальные изображения немодифицированного состояния в папку с выдвижными приложениями, чтобы получить эту работу. Поэтому в папке с моими приложениями у меня есть измененное изображение состояния фокусировки, а также немодифицированные оригинальные изображения других состояний. Теперь это работает. – zaplec

+0

Возможно, это не сработает, так как я сказал, что вам, возможно, придется скопировать их в вашу папку (как вам кажется, вы это сделали); это было всего лишь решением с моей головы. :) – 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

этот код не работает, показывая мне эту ошибку »02-07 03: 45: 01.131: E/AndroidRuntime (2911): вызвано: org.xmlpull.v1.XmlPullParserException: двоичная строка XML-файла # 8: тег требует атрибута 'drawable' или дочернего тега, определяющего drawable " – andrewww

+0

try' 'вместо' android: color' – sent1nel

+0

@ andrewww создать color.xml в ' res/color' и попробуйте 'android: color =" @ color/colorname "' –

0

Вам не нужно создавать XML-вводимого коэффициента. Это может быть проще в коде. Пример: в kotlin:

editText.onFocusChangeListener = OnFocusChangeListener { _, hasFocus -> 
    // colorLine, colorLineFocus is vars of ColorStateList 
    ViewCompat.setBackgroundTintList(editText, if (hasFocus) colorLineFocus else colorLine) 
} 
Смежные вопросы