it-roy-ru.com

Изменить цвет фона текста редактирования в Android

Если я изменю цвет фона моего EditText с помощью приведенного ниже кода, похоже, что поле уменьшено и не поддерживается тема ICS с синей нижней границей, которая существует для EditText по умолчанию.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:background="#99000000"
    >
    <EditText
        Android:id="@+id/id_nick_name"
        Android:layout_marginTop="80dip"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:background="#ffffff"  
    />
    <LinearLayout 
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
             Android:layout_marginTop="10dip"
             Android:layout_marginLeft="20dip"
             Android:layout_marginRight="20dip"
            Android:orientation="horizontal"
            Android:layout_below="@+id/id_nick_name">  
        <Button 
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="add"
            Android:layout_weight="1"
            />
         <Button 
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:text="cancel"
            Android:layout_weight="1"
            />
    </LinearLayout>
</RelativeLayout>

Вот как это выглядит:

Image of EditText

26
Naruto

Что вы должны сделать, это создать 9-патч-изображение для текста редактирования и установить это изображение в качестве фона для редактирования текста. Вы можете создать 9 патчей используя этот сайт

Я прилагаю образец изображения патча 9 для вашей справки. Используйте его в качестве фона редактирования текста, и вы получите идею. Щелкните правой кнопкой мыши на изображении и выберите «сохранить изображение как». При сохранении изображения не забудьте указать его расширение как «9.png».

enter image description here

9
Basim Sherif

одна строка ленивого кода:

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

Здесь лучший способ 

Во-первых: создайте новый xml файл в res/drawable, назовите его rounded_edit_text, затем вставьте это: 

<?xml version="1.0" encoding="utf-8"?>
<shape  xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:shape="rectangle" Android:padding="10dp">
    <solid Android:color="#F9966B" />
    <corners
        Android:bottomRightRadius="15dp"
        Android:bottomLeftRadius="15dp"
        Android:topLeftRadius="15dp"
        Android:topRightRadius="15dp" />
</shape>

Второе: в копии res/layout и после следующего кода (код EditText

<EditText
    Android:id="@+id/txtdoctor"
    Android:layout_width="match_parent"
    Android:layout_height="30dp"
    Android:layout_alignParentLeft="true"
    Android:layout_alignParentTop="true"
    Android:background="@drawable/rounded_edit_text"
    Android:ems="10" >
    <requestFocus />
</EditText>
17
Mohamed Ibrahim

Я создаю файл color.xml для присвоения имени своему цвету (черный, белый ...)

 <?xml version="1.0" encoding="utf-8"?>
 <resources>
    <color name="white">#ffffff</color>
    <color name="black">#000000</color>
 </resources>

И в вашем EditText, установите цвет

<EditText
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="asdsadasdasd"
        Android:textColor="@color/black"
        Android:background="@color/white"
        />

или используйте stylein you style.xml:

<style name="EditTextStyleWhite" parent="Android:style/Widget.EditText">
    <item name="Android:textColor">@color/black</item>
    <item name="Android:background">@color/white</item>
</style>

и добавьте созданный стиль в EditText:

 <EditText
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="asdsadasdasd"
        style="@style/EditTextStyleWhite"
        />
11
RN3KK Nick

Самое простое решение, которое я нашел, - это программно изменить цвет фона. Для этого not требуется работа с любыми изображениями из 9 патчей:

((EditText) findViewById(R.id.id_nick_name)).getBackground()
    .setColorFilter(Color.<your-desi‌​red-color>, PorterDuff.Mode.MULTIPLY);

Источник: другой ответ

1
Michael Herrmann

Используемый вами белый цвет - "#ffffff" - белый, поэтому попробуйте изменить другое значение, если хотите, пока не получите нужную ссылку по этой ссылке Цветовые коды и должно идти нормально

1
Cobra47

Для меня этот код работает Так что поместите этот код в XML-файл rounded_edit_text

<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android" > <item> <shape Android:shape="rectangle"> <stroke Android:width="1dp" Android:color="#3498db" /> <solid Android:color="#00FFFFFF" /> <padding Android:left="5dp" Android:top="5dp" Android:right="5dp" Android:bottom="5dp" > </padding> </shape> </item> </layer-list>

0
Aziz

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

Использование holoeverywhere

просто измените некоторые из ресурсов 9patch, чтобы настроить внешний вид и текст редактирования.

0
KaHeL

Я разработал рабочее решение этой проблемы после 2 дней борьбы, нижеприведенное решение идеально подходит для тех, кто хочет изменить только немного редактируемого текста, изменить/переключить цвет с помощью кода Java и хочет преодолеть проблемы различного поведения в версиях ОС из-за использования метода setColorFilter ().

    import Android.content.Context;
import Android.graphics.PorterDuff;
import Android.graphics.drawable.Drawable;
import Android.support.v4.content.ContextCompat;
import Android.support.v7.widget.AppCompatDrawableManager;
import Android.support.v7.widget.AppCompatEditText;
import Android.util.AttributeSet;
import com.newco.cooltv.R;

public class RqubeErrorEditText extends AppCompatEditText {

  private int errorUnderlineColor;
  private boolean isErrorStateEnabled;
  private boolean mHasReconstructedEditTextBackground;

  public RqubeErrorEditText(Context context) {
    super(context);
    initColors();
  }

  public RqubeErrorEditText(Context context, AttributeSet attrs) {
    super(context, attrs);
    initColors();
  }

  public RqubeErrorEditText(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initColors();
  }

  private void initColors() {
    errorUnderlineColor = R.color.et_error_color_rule;

  }

  public void setErrorColor() {
    ensureBackgroundDrawableStateWorkaround();
    getBackground().setColorFilter(AppCompatDrawableManager.getPorterDuffColorFilter(
        ContextCompat.getColor(getContext(), errorUnderlineColor), PorterDuff.Mode.SRC_IN));
  }

  private void ensureBackgroundDrawableStateWorkaround() {
    final Drawable bg = getBackground();
    if (bg == null) {
      return;
    }
    if (!mHasReconstructedEditTextBackground) {
      // This is gross. There is an issue in the platform which affects container Drawables
      // where the first drawable retrieved from resources will propogate any changes
      // (like color filter) to all instances from the cache. We'll try to workaround it...
      final Drawable newBg = bg.getConstantState().newDrawable();
      //if (bg instanceof DrawableContainer) {
      //  // If we have a Drawable container, we can try and set it's constant state via
      //  // reflection from the new Drawable
      //  mHasReconstructedEditTextBackground =
      //      DrawableUtils.setContainerConstantState(
      //          (DrawableContainer) bg, newBg.getConstantState());
      //}
      if (!mHasReconstructedEditTextBackground) {
        // If we reach here then we just need to set a brand new instance of the Drawable
        // as the background. This has the unfortunate side-effect of wiping out any
        // user set padding, but I'd hope that use of custom padding on an EditText
        // is limited.
        setBackgroundDrawable(newBg);
        mHasReconstructedEditTextBackground = true;
      }
    }
  }

  public boolean isErrorStateEnabled() {
    return isErrorStateEnabled;
  }

  public void setErrorState(boolean isErrorStateEnabled) {
    this.isErrorStateEnabled = isErrorStateEnabled;
    if (isErrorStateEnabled) {
      setErrorColor();
      invalidate();
    } else {
      getBackground().mutate().clearColorFilter();
      invalidate();
    }
  }
}

Использует в XML

<com.rqube.ui.widget.RqubeErrorEditText
            Android:id="@+id/f_signup_et_referral_code"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_alignParentTop="true"
            Android:layout_toEndOf="@+id/referral_iv"
            Android:layout_toRightOf="@+id/referral_iv"
            Android:ems="10"
            Android:hint="@string/lbl_referral_code"
            Android:imeOptions="actionNext"
            Android:inputType="textEmailAddress"
            Android:textSize="@dimen/text_size_sp_16"
            Android:theme="@style/EditTextStyle"/>

Добавить линии в стиле

<style name="EditTextStyle" parent="Android:Widget.EditText">
    <item name="Android:textColor">@color/txt_color_change</item>
    <item name="Android:textColorHint">@color/et_default_color_text</item>
    <item name="colorControlNormal">@color/et_default_color_rule</item>
    <item name="colorControlActivated">@color/et_engagged_color_rule</item>
  </style>

Java-код для переключения цвета

myRqubeEditText.setErrorState(true);
myRqubeEditText.setErrorState(false);
0
RQube