2

edittext 힌트 색상과 다른 포커스가있을 때 edittext의 플로팅 라벨 텍스트 색상을 설정하는 방법은 무엇입니까?edittext 힌트 색상과 다른 포커스가있을 때 edittext의 플로팅 라벨 텍스트 색상을 설정하는 방법은 무엇입니까?

힌트 색상을 처음으로 회색으로 설정했습니다. 사용자가 edittext에서 초점을 맞추면 빨간색으로 바뀝니다. 문제는 텍스트를 입력 한 후 edittext 포커스가 제거 된 후 편집 텍스트의 플로팅 레이블 텍스트 색상이 grey.I로 변경되는 것입니다. 편집 텍스트에 글자가 기록되지 않고 edittext에 포커스가없는 경우에도 항상 플로팅 레이블 색상이 빨간색이어야하는 경우에만 그레이는 힌트 색상이어야합니다. 다음은

코드 나는 일 아민은

<android.support.design.widget.TextInputLayout 
         android:id="@+id/amountLayout" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         app:hintTextAppearance="@style/TextAppearance.App.TextInputLayout" 
         android:paddingTop="@dimen/dp1"> 

         <android.support.design.widget.TextInputEditText 
          android:layout_width="match_parent" 
          android:layout_height="wrap_content" 
          android:hint="@string/amount" 
          android:textColor="@color/red" 
          android:inputType="number"/> 

</android.support.design.widget.TextInputLayout> 

<style name="TextAppearance.App.TextInputLayout" parent="@android:style/TextAppearance"> 
     <item name="android:textColor">@color/red</item> 
     <item name="android:textSize">@dimen/sp8</item> 
    </style> 
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorControlNormal">@color/red</item> 
     <item name="colorControlActivated">@color/red</item> 
     <item name="colorControlHighlight">@color/red</item> 
    <item name="android:textColorHint">@color/grey</item> 
</style> 

답변

1

그냥 EDITTEXT

android:textColorHighlight="@android:color/white" 

내에서이 속성을 삽입하여 부동 힌트의 색상을 변경할 수 있습니다 오전 또는 당신의 색상을 변경하려면 editText (부동 한 것이 아님)이 주제를 테마에 추가 할 수 있습니다.

<item name="android:textColorHint">@android:color/white</item> 
+0

문제는 글고 인 경우에 foating에 초점을하지 않는 것이있다 edittext의 레이블 텍스트 색상이 힌트 색상으로 변경됩니다. 따라서 android : textColorHint에 지정된 색상이 무엇이든, 플로팅 레이블 색상은 edittext에 포커스가 있지 않으면 변경됩니다. –

1

이 프로가 있습니다. 흠,하지만 해결 했어, 이건 내 해결책이야.

은 TextInputEditText가 아닌 TextInputLayout에만 추가하십시오. 당신이 TextInputEditText 및 TextInputLayout 모두에서이 특성을 설정하면

android:textColorHint="@color/yourLabelColorWhenNotFocus" 

, 아니면 그냥 TextInputEditText, 그것은 잘 작동하지 않습니다.

내가 할 수있는 방법을 찾아 TextInputLayout의 소스를 읽고에서 수없는
0

, 그것은 무엇 TextInputLayout 인 개인 회원 mDefaultTextColor을 수정할 수있는 방법이 없기 때문에이 프로그램 수 없습니다 밝혀 보기에 초점이 맞지 않으면 힌트 색상을 변경합니다. 이 설정 방법은 XML을 통해입니다 : 우리가 동적으로 설정할 수 있기를 원하기 때문에 분명히 것만으로는 충분하지 않습니다

android:textColorHint="@color/red" 

.

그래서 두 개의 확장 기능을 통해에 대한 접근자를 작성했습니다.

/** 
* We need these accessors because this field is private and programmatically unstyleable, 
* and we want to change the default (both focused and unfocused) hint text color. 
* 
* This is made safe by simply defaulting to null at any point there could be a problem. 
*/ 
private fun TextInputLayout.getDefaultTextColor(): ColorStateList? { 
    javaClass.getDeclaredField("mDefaultTextColor").let { field -> 
     field.isAccessible = true 
     return field.get(this) as? ColorStateList? 
    } 
} 

private fun TextInputLayout.setDefaultTextColor(color: ColorStateList) { 
    javaClass.getDeclaredField("mDefaultTextColor").let { field -> 
     field.isAccessible = true 
     field.set(this, color) 
    } 
} 

사용법 :

//Get the original color 
normalTextColor = text_input_layout.getDefaultTextColor() 

//Change the color to another color 
text_input_layout.setDefaultTextColor(ContextCompat.getColorStateList(context, R.color.red)) 
text_input_layout.setHintTextAppearance(R.style.TextAppearance_Error) 

//Change the color back to the default 
//(the TextInputLayout likes to use the inner TextInputEditText's hint color state list as a fallback, so we will too) 
text_input_layout.setDefaultTextColor(normalTextColor ?: inner_text.hintTextColors) 
text_input_layout.setHintTextAppearance(R.style.TextAppearance_Design_Hint) 

당신은 위의 참조에게 TextAppearance_Error 스타일을 알 수 있습니다, 그 정의는 단순히 :

<style name="TextAppearance.Error" parent="TextAppearance.Design.Hint"> 
    <item name="android:textColor">@color/red</item> 
</style>