appcompat v7을 사용하여 EditText 하단 선 색상 변경


310

appcompat v7을 사용하여 Android 5 이하에서 일관된 모양을 얻습니다. 오히려 잘 작동합니다. 그러나 EditText의 결론 색상과 악센트 색상을 변경하는 방법을 알 수 없습니다. 가능합니까?

사용자 정의를 정의하려고 시도했지만 android:editTextStyle(아래 참조) 전체 배경색 또는 텍스트 색상 만 변경했지만 결론이나 악센트 색상은 변경하지 못했습니다. 사용할 특정 속성 값이 있습니까? android:background속성을 통해 사용자 정의 드로어 블 이미지를 사용해야 합니까? hexa로 색상을 지정할 수 없습니까?

 <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:editTextStyle">@style/Widget.App.EditText</item>
 </style>

 <style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
     ???
 </style>

안드로이드 API 21 소스에 따르면, 머티리얼 디자인의 EditTexts는 colorControlActivated및 을 사용하는 것으로 보입니다 colorControlNormal. 따라서 이전 스타일 정의에서 이러한 속성을 재정의하려고 시도했지만 아무런 효과가 없습니다. 아마도 appcompat는 그것을 사용하지 않습니다. 불행히도, 머티리얼 디자인의 마지막 버전의 appcompat에 대한 소스를 찾을 수 없습니다.


텍스트 편집을위한 테마 정의
Meenal

당신의 제안에 감사드립니다. 그러나 나는 이미 그렇게했습니다. 이미 시도한 작업을 보여주기 위해 질문을 업데이트했습니다. 내 문제는 테마 텍스트에서 편집 텍스트 결론 선 색상을 변경하는 데 사용할 속성에 관한 것입니다. 이상적으로는 16 진수 색상을 직접 지정할 수있는 솔루션을 찾고 있습니다.
Laurent

이 답변 중 어느 것도 4.3에서 나를 위해 일하지 않습니다. 작동하는 솔루션이 있습니까?
Robert Baker

AppCompatEditText분명히 확장해야했습니다 .
EpicPandaForce

답변:


479

마지막으로 해결책을 찾았습니다. 그것은 단순히 값을 오버라이드 (override)으로 구성 colorControlActivated, colorControlHighlight그리고 colorControlNormal당신 글고 스타일 앱 테마 정의하지. 그런 다음 원하는 활동에이 테마를 사용하십시오. 아래는 예입니다.

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">@color/accent</item>
    <item name="colorControlHighlight">@color/accent</item>
</style>

9
메뉴 햄버거, 뒤로 버튼 및 스크롤 막대의 색상이 colorControlNormal로 변경되었음을 알 수 있습니다.
ario

11
이것은 결론의 색상을 변경하지만 확인란, 라디오 버튼 등과 같은 다른 모든 컨트롤도 변경합니다. 또한 전체 응용 프로그램 / 활동에서 모든 EditText를 변경합니다. 단일 EditText의 결론을 변경하려면 (예 : 내가하는 것처럼) 해당 EditText의 android : background 속성을 재정의해야합니다. 다른 방법은 없습니다.
엠마누엘 Moecklin

68
AppCompat v22 지원 라이브러리를 사용하는 경우 EditText에서 테마를 다음과 같이 지정할 수 있습니다 android:theme="@style/Theme.App.Base. 이렇게하면 스타일이 변경하지 않으려는 레이아웃의 다른보기에도 영향을 미치지 않습니다.
Alex Lockwood

8
젤리 빈 (4.2)에서 작동하지만, 롤리팝에 근무하지 않았다
Mangesh에게

3
활동은에서 상속해야합니다 AppCompatActivity. 에서 상속하면 작동하지 않습니다 Activity.
Bharathwaaj 2016 년

187

누군가 단일 편집 텍스트 만 변경하려는 경우 답변이 필요하다고 생각했습니다. 나는 이렇게한다 :

editText.getBackground().mutate().setColorFilter(ContextCompat.getColor(context, R.color.your_color), PorterDuff.Mode.SRC_ATOP);

1
그러나 기본 배경으로 어떻게 재설정 할 수 있습니까? 롤리팝에서 editText.getBackground (). resetColorFilter ()를 호출 한 후 많은 버그가 있습니까?
ultraon

주의! 이것을 추가하면 모든 앱에서 editText의 색상이 변경 될 수 있습니다. Nexus 5에서 테스트되었습니다. OS 6.0.1.
Alex Perevozchykov

1
@AlexPerevozchykov 당신이 옳을 수도 있습니다. .getBackground () 뒤에 .mutate ()를 추가하십시오. 그렇게해야합니다.
hordurh

@hordurh 네, 그렇습니다.이 제안을 조금 일찍 받았습니다. 드로어 블은 하나의 풀을 공유하므로 변경하기 전에 변경해야합니다.
Alex Perevozchykov

1
edittext를 사용하면 작동하지만이 방법은 롤리팝의 앱 compat edittext에서 작동하지 않습니다. 문제를 어떻게 해결할 수 있는지 알고 있습니까?
셀린

145

하지만 로렌 솔루션이 올바른지, 그것은이의 하단 라인뿐만 아니라 이후의 주석에 설명 된대로 몇 가지 단점이 함께 제공 EditText착색됩니다 만의 뒤로 버튼 Toolbar, CheckBoxes뿐만 아니라 등.

운 좋게도 몇 가지 새로운 가능성 v22.1appcompat-v7소개되었습니다. 이제 특정 테마를 하나의보기에만 지정할 수 있습니다. 변경 로그 에서 바로 :

툴바 스타일링에 app : theme을 사용하지 않습니다. 이제 모든 API 레벨 7 이상 디바이스에서 도구 모음에 android : theme을 사용할 수 있으며 , API 레벨 11 이상 디바이스에서 모든 위젯대해 android : theme 지원 사용할 수 있습니다.

전역 테마에서 원하는 색상을 설정하는 대신 새 색상을 만들어에 지정합니다 EditText.

예:

<style name="MyEditTextTheme">
    <!-- Used for the bottom line when not selected / focused -->
    <item name="colorControlNormal">#9e9e9e</item>
    <!-- colorControlActivated & colorControlHighlight use the colorAccent color by default -->
</style>

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/MyEditTextTheme"/>

1
나는 이것이 필요하다고 생각하지 않습니다. colorControlNormal안드로이드 접두어가 없으면 appcompat 메소드를 사용하여 위젯을 착색하고 접두사가 있으면 시스템 메소드로 폴백되며 API 21+ 기기에서만 사용할 수 있습니다.
reVerse

흠, 나는 롤리팝 장치에서 테스트했으며 안드로이드 네임 스페이스를 사용하여 v21 스타일로 구현하지 않으면 사용자 정의 색상으로 색조를 나타내지 않습니다.
user2968401

22.2.0AppCompat 버전을 사용하고 있지만이 트릭은 작동하지 않습니다. (
Shajeel Afzal

1
<item name = "colorAccent"> # 000000 </ item>을 사용하면 colorControlNormal 대신 나를 위해 일했습니다.
MikeOscarEcho

앱에서 하나의 편집 텍스트 만 변경하면 완벽합니다! (정확히 내가 필요한 것! 감사합니다)
Romain Barbier

99

다음을 사용하여 XML로 변경할 수 있습니다.

참조 API> = 21 호환성의 경우 :

android:backgroundTint="@color/blue"

하위 API <21 호환성의 경우 :

app:backgroundTint="@color/blue"

10
예, 그러나 Android API 버전 21 이상 (kitkat 및 lolipop)에서만 작동합니다. 아마도 이전 버전과 호환되는 솔루션을 만들려고했을 것입니다.
DaMachk

12
그냥 사용하는 backgroundTint="@color/blue"대신 android:backgroundTint="@color/blue"이전 버전과 호환 지원
Kishan Vaghela

11
@KishanVaghela는을 사용하는 대신 롤리팝 이전 장치를 지원 android:backgroundTint="@color/blue"하는 app:backgroundTint="@color/blue"데 사용 합니다.
블루웨어

2
@blueware 스타일로 사용하려면 "앱"을 사용할 필요가 없습니다.
Kishan Vaghela

tools:ignore="MissingPrefix"아래에 빨간색 밑줄이 튀는 경우 추가app:backgroundTint="<your color>"
Moses Aprico

47

다음은 API <21 이상의 솔루션입니다.

Drawable drawable = yourEditText.getBackground(); // get current EditText drawable 
drawable.setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_ATOP); // change the drawable color

if(Build.VERSION.SDK_INT > 16) {
    yourEditText.setBackground(drawable); // set the new drawable to EditText
}else{
    yourEditText.setBackgroundDrawable(drawable); // use setBackgroundDrawable because setBackground required API 16
}

여기에 이미지 설명을 입력하십시오

도움이되기를 바랍니다.


@CoolMind 늦게 응답해서 죄송합니다. 나는 지원 라이브러리에 다시 코드를 확인해야 24.2.1, 25.1.1, 25.2.0장치 <21> (21)과 여전히 작동합니다. 이 간단한 데모 drive.google.com/file/d/0B_poNaia6t8kSzU3bDFVazRSSDA/…를 확인하십시오 . 이 코드가 왜 작동하지 않는지 모르겠으므로 알려주십시오. 감사합니다
판 반 린

@Renjith 늦게 응답해서 죄송합니다, 위의 내 의견을 확인하시기 바랍니다
판 반 린

이 코드로 색상을 기본값으로 어떻게 재설정합니까?
니프

35

허용되는 답변은 스타일별로 조금 더 있지만, 가장 효율적인 방법은 AppTheme 스타일에 다음과 같이 colorAccent 속성 을 추가하는 것입니다.

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:editTextStyle">@style/EditTextStyle</item>
</style>

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>

colorAccent 속성은 앱 전체에서 위젯 색조에 사용되므로 일관성에 사용해야합니다.


8
@Tomasz 부모 테마는 API 7로 내려가는 AppCompat이기 때문에 API 21 이상이 필요하지 않습니다
TanmayP

어이. 감사합니다. name="android:colorAccent"실수 로 사용했습니다
Jules

29

당신이 사용하는 경우 appcompat-v7:22.1.0+에는 사용할 수 DrawableCompat를 위젯의 착색에

    public static void tintWidget(View view, int color) {
        Drawable wrappedDrawable = DrawableCompat.wrap(view.getBackground());
        DrawableCompat.setTint(wrappedDrawable.mutate(), getResources().getColor(color));
        view.setBackgroundDrawable(wrappedDrawable);
    }

생명의 은인이 얼마나 대단한지, 잘 모르는 부끄러움
pt123

아래로 내려 가서 디자인 라이브러리 23.2.0에 대한 내 대답을 참조하십시오. 이 방법은 현재 쓸모가 없습니다.
ywwynm

21

사용하다:

<EditText
    app:backgroundTint="@color/blue"/>

+21뿐만 아니라 롤리팝 이전 기기도 지원합니다


@ powder366, 앱 메인 테마를 게시 할 수 있습니까?
blueware

1
<style name = "AppTheme"parent = "Theme.AppCompat.Light.DarkActionBar">
powder366

2
@ powder366, 이것을 시도하십시오 : <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">그것은 작동해야합니다
블루웨어

19

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">@color/colorAccent</item>
    <item name="colorControlActivated">@color/colorAccent</item>
    <item name="colorControlHighlight">@color/colorAccent</item>

</style>


효과가있다! 질문에서 알 수 있듯이 스타일 / 테마에서 해결해야합니다. 정답이어야합니다.
닌자

나는 동의한다. 이것은 세계적인 해결책이므로 정답이어야합니다
Santacrab

컨트롤마다 다른 색이 필요한 경우 불편합니다.
Julius

12

문제에 대한 빠른 해결책 중 하나는 appspackage / build / intermediates / exploded-aar / com.android.support / appcompat-v7 / res / drawable /에서 abc_edit_text_material.xml을 찾고 해당 XML 파일을 드로어 블 폴더에 복사하는 것입니다. 그런 다음이 선택기 내부에서 9 개의 패치 파일 색상을 변경하여 원하는대로 설정할 수 있습니다.


9

android:backgroundTint속성을 추가하는 것은 매우 쉽습니다 EditText.

android:backgroundTint="@color/blue"
android:backgroundTint="#ffffff"
android:backgroundTint="@color/red"


 <EditText
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:backgroundTint="#ffffff"/>

2
API leve 21 위의 backgroundTint
Ashwin H

ViewCompat.setBackgroundTintList (editText, ColorStateList.valueOf (Color.YELLOW))
Arst

1
app:backgroundTint="@color/blue"모든 API 레벨에서 작동합니다. 어떤 이유로 든 XD를 선택했을 때 여전히 다른 색으로
바뀌고 있습니다.

8

다음은 TextInputLayout지원 디자인 라이브러리 ( 버전 23.2.0의 경우 UPDATED) 의 소스 코드 일부로 , EditText가장 간단한 방식으로 최종선 색상 을 변경합니다 .

private void updateEditTextBackground() {
    ensureBackgroundDrawableStateWorkaround();

    final Drawable editTextBackground = mEditText.getBackground();
    if (editTextBackground == null) {
        return;
    }

    if (mErrorShown && mErrorView != null) {
        // Set a color filter of the error color
        editTextBackground.setColorFilter(
                AppCompatDrawableManager.getPorterDuffColorFilter(
                        mErrorView.getCurrentTextColor(), PorterDuff.Mode.SRC_IN));
    }
    ...
}

프로그래밍 방식으로 색상을 변경하려면 위의 모든 코드가 23.2.0에서 현재 쓸모없는 것처럼 보입니다.

그리고 모든 플랫폼을 지원하려면 다음 방법을 따르십시오.

/**
 * Set backgroundTint to {@link View} across all targeting platform level.
 * @param view the {@link View} to tint.
 * @param color color used to tint.
 */
public static void tintView(View view, int color) {
    final Drawable d = view.getBackground();
    final Drawable nd = d.getConstantState().newDrawable();
    nd.setColorFilter(AppCompatDrawableManager.getPorterDuffColorFilter(
            color, PorterDuff.Mode.SRC_IN));
    view.setBackground(nd);
}

AppCompatDrawableManager 란 무엇입니까? setBackground에는 API 16이 필요합니다.
CoolMind

8

나도이 문제에 너무 오랫동안 붙어있었습니다.

v21 위와 아래 버전 모두에서 작동하는 솔루션이 필요했습니다.

마침내 매우 간단하지만 이상적이지 않은 효과적인 솔루션을 발견했습니다 transparent. EditText 속성에서 배경색을 간단히 설정하십시오 .

<EditText
    android:background="@android:color/transparent"/>

이것이 누군가를 구하기를 바랍니다.


1
전체 배경색이 바뀌고 밑줄 색만 변경하려고합니다.
shahzain ali

@shahzain ali EditText의 밑줄은 배경입니다. null로 설정하면 사라집니다. 이것이 backgroundTint가 작동하는 이유입니다 (그러나 활성화되면 색상이 변경되지 않음)
nyconing

7

나를 위해 AppTheme과 값 colors.xml을 모두 수정했습니다. colorControlNormal과 colorAccent 모두 EditText 테두리 색상을 변경하는 데 도움이되었습니다. 커서와 "|" EditText 안에있을 때.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorControlNormal">@color/yellow</item>
    <item name="colorAccent">@color/yellow</item>
</style>

여기 colors.xml이 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="yellow">#B7EC2A</color>
</resources>

editText 스타일 안에 넣은 @null에 android : textCursorDrawable 속성을 가져 왔습니다. 이것을 사용해 보았을 때 색상이 변하지 않았습니다.


2
정답은
Mina Samy

매력처럼 일했다. 감사합니다
Däñish Shärmà

6

편집 텍스트의 배경을 왼쪽, 오른쪽 및 상단에 마이너스 패딩이있는 사각형으로 설정하여이를 수행 할 수 있습니다. 다음은 xml 예제입니다.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:top="-1dp"
        android:left="-1dp"
        android:right="-1dp"
        android:bottom="1dp"
        >
        <shape android:shape="rectangle">
            <stroke android:width="1dp" android:color="#6A9A3A"/>
        </shape>
    </item>
</layer-list>

포커스가있는 편집 텍스트에 다른 너비와 색상을 제공하려면 모양을 선택기로 바꿉니다.


5

Activit.XML에서 코드를 추가하십시오.

<EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPersonName"
        android:ems="10"
        android:id="@+id/editText"
        android:hint="Informe o usuário"
        android:backgroundTint="@android:color/transparent"/>

BackgroundTint=color원하는 색상을 찾을 수있는 곳


5

이 방법을 사용하여 다른 드로어 블이없는 PorterDuff의 선 색상을 변경합니다.

public void changeBottomColorSearchView(int color) {
    int searchPlateId = mSearchView.getContext().getResources().getIdentifier("android:id/search_plate", null, null);
    View searchPlate = mSearchView.findViewById(searchPlateId);
    searchPlate.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);
}

간단한 EditText의 결론에 액세스하기 위해 비슷한 식별자가 있습니까?
Rémi P

4

앱 색상을 사용하지 않고 결론을 변경하려면 테마에서 다음 줄을 사용하십시오.

<item name="android:editTextStyle">@android:style/Widget.EditText</item>
<item name="editTextStyle">@android:style/Widget.EditText</item>

다른 해결책을 모르겠습니다.


4

2 일간의 어려움을 겪은 후에이 문제에 대한 해결책을 찾았습니다. 아래 솔루션은 편집 텍스트를 거의 변경하지 않고 Java 코드를 통해 색상을 변경 / 전환하고 OS 버전에서 다른 동작의 문제를 극복하려는 사람들에게 적합합니다. 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);

2

나는이 문제로 인해 당황했습니다. 나는이 스레드와 다른 스레드에서 모든 것을 시도했지만, 내가 한 일에 관계없이 밑줄의 색상을 기본 파란색 이외의 다른 색으로 변경할 수 없었습니다.

나는 마침내 무슨 일이 일어나고 있는지 알아 냈습니다. android.widget.EditText새 인스턴스를 만들 때 (올바르지 않게) 사용 하고 있었지만 나머지 구성 요소는 appcompat 라이브러리에서 가져 왔습니다. 나는 사용 했어야했다 android.support.v7.widget.AppCompatEditText. 나는 대체 new EditText(this)와 함께 new AppCompatEditText(this) 하고 문제는 즉시 해결되었다. 실제로을 사용하는 경우 테마 위 AppCompatEditText의 내용 accentColor을 존중하고 (위의 여러 의견에서 언급 한 것처럼) 추가 구성이 필요하지 않습니다.


2

이것은 모든 API에서 가장 쉽고 효율적이며 재사용 가능하며 작동합니다
. 다음과 같이 사용자 정의 EditText 클래스를 작성하십시오.

public class EditText extends android.widget.EditText {
    public EditText(Context context) {
        super(context);
        init();
    }

    public EditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public EditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        getBackground().mutate().setColorFilter(ContextCompat.getColor(getContext(), R.color.colorAccent), PorterDuff.Mode.SRC_ATOP);
    }
}

그런 다음 다음과 같이 사용하십시오.

 <company.com.app.EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"/>

2

EditText 배경을 동적으로 변경하려면 ColorStateList 를 사용 하면 됩니다.

int[][] states = new int[][] {
    new int[] { android.R.attr.state_enabled}, // enabled
    new int[] {-android.R.attr.state_enabled}, // disabled
    new int[] {-android.R.attr.state_checked}, // unchecked
    new int[] { android.R.attr.state_pressed}  // pressed
};

int[] colors = new int[] {
    Color.BLACK,
    Color.RED,
    Color.GREEN,
    Color.BLUE
};

ColorStateList colorStateList = new ColorStateList(states, colors);

크레딧 : ColorStateList에 대한 SO 답변은 훌륭 합니다.


그리고 어떤 방법을 사용해야합니까? setBackgroundTintList? API 21이 필요합니다.
CoolMind

setSupportBackgroundTintList 오래된 API의 verisons을 위해.
Ankit Popli

0

app:backgroundTintAPI 레벨 21 이하에 추가하십시오 . 그렇지 않으면을 사용하십시오 android:backgroundTint.

API 레벨 21 이하

<EditText
     android:id="@+id/edt_name"
     android:layout_width="300dp"
     android:layout_height="wrap_content"
     android:textColor="#0012ff"
     app:backgroundTint="#0012ff"/>

API 레벨 21보다 높습니다.

<EditText
     android:id="@+id/edt_name"
     android:layout_width="300dp"
     android:layout_height="wrap_content"
     android:textColor="#0012ff"
     android:backgroundTint="#0012ff"/>

-2

필요에 따라이 방법을 수정하십시오. 이것은 나를 위해 일했다!

  private boolean validateMobilenumber() {
        if (mobilenumber.getText().toString().trim().isEmpty() || mobilenumber.getText().toString().length() < 10) {
            input_layout_mobilenumber.setErrorEnabled(true);
            input_layout_mobilenumber.setError(getString(R.string.err_msg_mobilenumber));
           // requestFocus(mobilenumber);
            return false;
        } else {
            input_layout_mobilenumber.setError(null);
            input_layout_mobilenumber.setErrorEnabled(false);
            mobilenumber.setBackground(mobilenumber.getBackground().getConstantState().newDrawable());
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.