Проблема с фоном EditText (Android) - PullRequest
8 голосов
/ 26 октября 2009

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

<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"      
      />

альтернативный текст 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"    
      />

альтернативный текст http://i765.photobucket.com/albums/xx299/trieutrinhtrinh/edittext2.jpg

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

Ответы [ 8 ]

16 голосов
/ 22 февраля 2011

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

Выпуск : Когда для фона установлено значение EditText, это выглядит так ужасно

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

Существует два решения этой проблемы, каждое из которых имеет свои преимущества и недостатки:

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

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

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

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

callСоздать вызов 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>

nНа селекторе EditText xml set:

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

Примечание

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

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

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

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

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

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

11 голосов
/ 19 июля 2011

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

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

Он ломается так:

  • "getBackground ()" извлекает фон из компонента
  • setColorFilter вызовет фильтрацию на самом фоновом изображении
  • «Color. » определяет, какой цвет вы хотите передать на фильтр
  • «PorterDuff.Mode. <Ваш-требуемый-фильтр-режим>» устанавливает вид манипуляции, который вы хотели бы делать с данным цветом и извлеченным фоновым изображением.

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

4 голосов
/ 18 июля 2011

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

YourEditText.getBackground().setColorFilter(getResources().getColor(R.color.your_color), PorterDuff.Mode.MULTIPLY);
4 голосов
/ 27 октября 2009

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

3 голосов
/ 29 июня 2012

Вам не нужно создавать изображение. В системе 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"

2 голосов
/ 26 октября 2009

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

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

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

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

1 голос
/ 07 сентября 2010

Проверьте http://www.androidworks.com/changing-the-android-edittext-ui-widget, если хотите оформить свой EditText's.

0 голосов
/ 19 сентября 2014

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

mEditText.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...