Проблема с фоном 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 поддерживать стиль по умолчанию?

Solutions Collecting From Web of "Проблема с фоном 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);