2013-09-09 5 views
23

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

<?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

ответ

9

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

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

enter image description here

+1

То большое, спасибо много, я буду проверять его. спасибо за помощь ур – Naruto

+0

круто, он работает, как и я ожидал, что только вещь есть. Мне просто нужно изменить изображение в соответствии с моим требованием. спасибо – Naruto

0

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

Using holoeverywhere

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

1

цвет вы используете белый «#ffffff» белый поэтому попробуйте другой одно изменение в значениях, если вы хотите, пока вы не получите ваши потребности по этой ссылке Color Codes и он должен идти мелкий

15

Вот лучший способ

Первый: сделать новый 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> 

Второе: в разрешении/макет копии и пройти следующий код (код 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> 
+0

вы можете изменить сплошной цвет на нужный вам цвет –

+0

Пожалуйста, помогите мне узнать, как макет читает пригодный для рисования файл? Заранее спасибо. – Pravin

10

Я создаю файл 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" 
     /> 

или использовать стиль в вашем стиле.XML:

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

и добавить ctreated стиль EditText:

<EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="asdsadasdasd" 
     style="@style/EditTextStyleWhite" 
     /> 
0

Для меня этот код он работает Так поместить этот код в файл 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>

1

Самое простое решение, которое у меня есть nd - программно изменить цвет фона. Это делает не требуют решения любых 9-накладными изображениями:

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

Источник: another answer

+0

вам не хватает .getBackground() ((EditText) findViewById (R.id.id_nick_name)). GetBackground(). SetColorFilter (цвет. <Ваш-желаемый-цвет>, PorterDuff.Mode.MULTIPLY); –

+0

Вы правы, спасибо. Я обновил свой ответ. –

31

одна линия ленивым кода:

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

Это отлично подходит для тонирования фона как для Holo, так и для Material Design, и его легко реализовать. Благодаря! Вероятно, это должен быть принятый ответ - он сохраняет исходный фон вида и его размеры, изменяя его цвет. – Tom

+0

ты - спасатель! –

+0

Это работает, но другие edittexts в моем приложении сохраняют этот цвет –

0

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

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);