Проблема с фоном EditText (андроид)

У меня проблема с BackgroundText фона, как это

<EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="35sp" android:singleLine="true" android:layout_marginLeft="5px" android:layout_marginRight="5px" android:layout_marginTop="5px" android:textAppearance="?android:attr/textAppearanceSmall" /> 

Alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext.jpg

После попытки установить фон, он выглядит хуже

 <EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="35sp" android:singleLine="true" android:layout_marginLeft="5px" android:layout_marginRight="5px" android:layout_marginTop="5px" android:textAppearance="?android:attr/textAppearanceSmall" android:background="#ffffff" /> 

Alt text http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext2.jpg

Что происходит с фоном EditText? Как сделать EditText поддерживать стиль по умолчанию?

Если вы установите фон EditText на цвет, вы эффективно подавите фоновый фон Android по умолчанию, который, вероятно, является Девять патчей, но определенно не просто простым цветом. В результате вы получите простейшую форму EditText – квадратную коробку. Вот немного устаревший список встроенных чертежей, чтобы дать вам некоторую идею

Вот 2 Решение изменить фон EditText, перед которым я раньше исследовал, надеюсь, что он может вам помочь:

Проблема : при установке Background на EditText это выглядит так ужасно

Analysys : EditText использовал изображение с девятью дорожками для фона. Они использовали селектор для изменения базы фонового изображения в текущем состоянии EditText (Enable / Focus / Press, Default)

Есть два решения решить эту проблему, каждое решение имеет как преимущество, так и недостаток:

Решение1 : Создайте собственный EditText (следуйте этому решению, мы имеем возможность свободно изменять вид EditText.

Преимущество : ваш свободно визуализированный вид EditText соответствует вашей цели, не нужно создавать изображение Ninepath как текущий инструмент Android EditText. (Ваш провайдер IF должен использовать ваш EditText для плавного изменения фона в состоянии EditText (Enable / Focus ….). Повторное использование и более обычай в случае, если вы хотите изменить цвет фона или добавить цвет

Недостаток : приложите много усилий, чтобы создать и протестировать свой собственный EditText. (Я выбираю решение 2, поэтому не имею демонстрационной реализации решения 1, если кто-либо последует этому решению, не стесняйтесь делиться с нами вашим демо-кодом)

Решение2 : Используется селектор в качестве инструмента Android

❶Создать xml-файл для вызова edittext_selector.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/edittext_selector"> <!-- Image display in background in select state --> <item android:state_pressed="true" android:drawable="@drawable/your_ninepath_image"> </item> <!-- Image display in background in select state --> <item android:state_enabled="true" android:state_focused="true" android:drawable="@drawable/your_ninepath_image"> </item> <!-- Default state --> <item android:state_enabled="true" android:drawable="@drawable/your_ninepath_image"> </item> </selector> 

❷Изменить селектор селектора EditText:

 <EditText ... android:background="@layout/**edittext_selector**" ... </EditText> 

Примечание :

● В этом демо-коде я удалил какое-то поведение состояния представления, обратитесь к инструменту android для подробного поведения (фокус / нефокус, включение / выключение, нажатие, выбор …)

● Соблюдайте порядок действий в вашем селекторе. Разностный порядок элемента в XML-файле selector будет иметь разностный фон.

Преимущество : просто, просто создайте селектор и установите селектор в фоновом режиме, если вы хотите больше цвета, просто установите более селектор, а затем установите его по коду.

Недостаток : примите усилия, чтобы создать изображение с девятью дорожками для селектора, если вы хотите изменить цвет или добавить больше цвета, вы должны создать больше изображений и селекторов. Таким образом, он менее надежный, чем Solution1

Это мое исследование для обработчика фона, так что это может быть правильным или неправильным, если у вас есть лучшее решение или объясните, не стесняйтесь делиться с нами.

Я реализовал следующее решение 2, и оно сработало.

Мое решение – это одна строка кода:

 <your-widget-component-that-has-a-background-color>.getBackground().setColorFilter(Color.<your-desired-color>, PorterDuff.Mode.MULTIPLY);). 

Это ломается так:

  • «GetBackground ()» извлекает фон из компонента
  • «SetColorFilter» вызовет фильтрацию на фоновом изображении
  • «Цвет. <Ваш-цвет-здесь>» определяет, какой цвет вы хотите передать на фильтр
  • «PorterDuff.Mode. <Your-wish-filter-mode>» устанавливает тип манипуляции, который вы хотели бы сделать с заданным цветом и выбранным фоном.

Люди со знанием программного обеспечения для редактирования изображений могут распознавать режим. Каждый режим оказывает определенное влияние на то, как цвет применяется к фоновому изображению. Чтобы просто «переопределить» цвет изображения, сохраняя его градиенты, границы и т. Д., Используйте MULTIPLY .

Если вы хотите изменить цвет фона Android на лету без изменения фонового изображения, попробуйте следующее: (это, вероятно, не лучшее решение, но оно работает):

 YourEditText.getBackground().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.MULTIPLY); 

Вам не нужно создавать изображение. Существует встроенный образ в системе Android, который вы можете использовать. Так что отредактируйте свой EditText в xml следующим образом:

 <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="10dp" android:hint="@string/campaign_message" android:inputType="textMultiLine" android:background="@android:drawable/editbox_background_normal" android:minHeight="80dp" > </EditText> 

Обратите внимание на эту строку: android:background="@android:drawable/editbox_background_normal"

Как я думаю, вы должны изменить цвет фона, а не фон. Потому что он использует обычную форму xml.

  • Выбирается для использования в качестве фона. Это может быть ссылка на полный ресурс (например, изображение PNG, 9-патч, описание списка состояний XML и т. Д.) Или сплошной цвет, такой как #ff000000 (черный).

  • Может быть ссылкой на другой ресурс в форме @[+][package:]type:name или в атрибут темы в форме ?[package:][type:]nam e.

  • Может быть значением цвета, в виде #rgb , #argb , #rrggbb или #aarrggbb .

Ознакомьтесь с http://www.androidworks.com/changing-the-android-edittext-ui-widget, если вы хотите создать стиль EditText.

Мне пришлось использовать SRC_ATOP, чтобы он работал для меня

 mEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);