나는 안드로이드 디자인 라이브러리의 TextinputLayout
. 그러나 EditText
내부 의 힌트 색상, 레이블 색상 및 밑줄 색상을 사용자 정의 할 수 없습니다 TextinputLayout
. 도와주세요.
나는 안드로이드 디자인 라이브러리의 TextinputLayout
. 그러나 EditText
내부 의 힌트 색상, 레이블 색상 및 밑줄 색상을 사용자 정의 할 수 없습니다 TextinputLayout
. 도와주세요.
답변:
<item name="colorControlNormal">#c5c5c5</item>
<item name="colorControlActivated">@color/accent</item>
<item name="colorControlHighlight">@color/accent</item>
<style name="MyHintStyle" parent="@android:style/TextAppearance">
<item name="android:textColor">@color/main_color</item>
</style>
다음과 같이 사용하십시오.
<android.support.design.widget.TextInputLayout
...
app:hintTextAppearance="@style/MyHintStyle">
<android.support.design.widget.TextInputLayout
...
app:hintTextAppearance="@style/MyHintStyle"
android:textColorHint="#c1c2c4">
@AlbAtNf 덕분에
android:textColorHint
했습니다 TextInputLayout
.
Fedor Kazakov 및 기타 답변을 기반으로 기본 구성을 만들었습니다.
styles.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="Widget.Design.TextInputLayout" parent="AppTheme">
<item name="hintTextAppearance">@style/AppTheme.TextFloatLabelAppearance</item>
<item name="errorTextAppearance">@style/AppTheme.TextErrorAppearance</item>
<item name="counterTextAppearance">@style/TextAppearance.Design.Counter</item>
<item name="counterOverflowTextAppearance">@style/TextAppearance.Design.Counter.Overflow</item>
</style>
<style name="AppTheme.TextFloatLabelAppearance" parent="TextAppearance.Design.Hint">
<!-- Floating label appearance here -->
<item name="android:textColor">@color/colorAccent</item>
<item name="android:textSize">20sp</item>
</style>
<style name="AppTheme.TextErrorAppearance" parent="TextAppearance.Design.Error">
<!-- Error message appearance here -->
<item name="android:textColor">#ff0000</item>
<item name="android:textSize">20sp</item>
</style>
</resources>
activity_layout.xml
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.AppCompatEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Text hint here"
android:text="5,2" />
</android.support.design.widget.TextInputLayout>
집중 :
초점없이 :
에러 메시지:
으로 재료 구성 요소 라이브러리 당신은을 사용할 수 있습니다 com.google.android.material.textfield.TextInputLayout
.
사용자 지정 스타일을 적용하여 색상을 변경할 수 있습니다.
힌트 색상을 변경하려면 다음 속성을 사용해야합니다.
hintTextColor
및 android:textColorHint
.
<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
<!-- The color of the label when it is collapsed and the text field is active -->
<item name="hintTextColor">?attr/colorPrimary</item>
<!-- The color of the label in all other text field states (such as resting and disabled) -->
<item name="android:textColorHint">@color/selector_hint_text_color</item>
</style>
에 대한 선택기를 사용해야합니다 android:textColorHint
. 다음과 같은 것 :
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:alpha="0.38" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
<item android:alpha="0.6" android:color="?attr/colorOnSurface"/>
</selector>
하단 라인 색상을 변경하려면 속성을 사용해야합니다 : boxStrokeColor
.
<style name="Custom_textinputlayout_filledbox" parent="@style/Widget.MaterialComponents.TextInputLayout.FilledBox">
....
<item name="boxStrokeColor">@color/selector_stroke_color</item>
</style>
또한이 경우 선택기를 사용해야합니다. 다음과 같은 것 :
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="?attr/colorPrimary" android:state_focused="true"/>
<item android:alpha="0.87" android:color="?attr/colorOnSurface" android:state_hovered="true"/>
<item android:alpha="0.12" android:color="?attr/colorOnSurface" android:state_enabled="false"/>
<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
</selector>
레이아웃에 다음 속성을 적용 할 수도 있습니다.
<com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox"
app:boxStrokeColor="@color/selector_stroke_color"
app:hintTextColor="?attr/colorPrimary"
android:textColorHint="@color/selector_hint_text_color"
...>
boxStrokeColor
. 예 selector_stroke_color
에서 특히 마지막 줄은 다음과 같습니다.<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
이 블로그 포스트 의 다양한 스타일링 측면에 대해 설명 EditText
하고 AutoCompleteTextView
래핑을 TextInputLayout
.
들어 EditText
및 22.1.0+ lib에는 APPCOMPAT 일부 테마 관련 설정과 테마 속성을 설정할 수 있습니다 :
<style name="StyledTilEditTextTheme">
<item name="android:imeOptions">actionNext</item>
<item name="android:singleLine">true</item>
<item name="colorControlNormal">@color/greyLight</item>
<item name="colorControlActivated">@color/blue</item>
<item name="android:textColorPrimary">@color/blue</item>
<item name="android:textSize">@dimen/styledtil_edit_text_size</item>
</style>
<style name="StyledTilEditText">
<item name="android:theme">@style/StyledTilEditTextTheme</item>
<item name="android:paddingTop">4dp</item>
</style>
에 적용하십시오 EditText
:
<EditText
android:id="@+id/etEditText"
style="@style/StyledTilEditText"
들어 AutoCompleteTextView
가지 더 그것을 포장하기 때문에 복잡 TextInputLayout
하고 라벨 동작을 부동이 주제 바꿈을 적용. 코드에서이 문제를 해결해야합니다.
private void setStyleForTextForAutoComplete(int color) {
Drawable wrappedDrawable = DrawableCompat.wrap(autoCompleteTextView.getBackground());
DrawableCompat.setTint(wrappedDrawable, color);
autoCompleteTextView.setBackgroundDrawable(wrappedDrawable);
}
그리고 Activity.onCreate
:
setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
autoCompleteTextView.setOnFocusChangeListener((v, hasFocus) -> {
if(hasFocus) {
setStyleForTextForAutoComplete(getResources().getColor(R.color.blue));
} else {
if(autoCompleteTextView.getText().length() == 0) {
setStyleForTextForAutoComplete(getResources().getColor(R.color.greyLight));
}
}
});
당신이 변경하려는 경우 바 / 선 색상과 힌트 텍스트 색상 의을 TextInputLayout
(악센트 색상은 일반적으로 무엇인지), 다음 그냥이 스타일을 만들 :
<style name="MyStyle">
<item name="colorAccent">@color/your_color</item>
</style>
그런 다음 테마TextInputLayout
로 적용하십시오 .
<android.support.design.widget.TextInputLayout
...
app:theme="@style/MyStyle" />
이것은 기본적으로 테마 (스타일이 아님)를 하나의보기로 설정합니다 (전체 활동이 아니라).
<style name="Widget.Design.TextInputLayout" parent="android:Widget">
<item name="hintTextAppearance">@style/TextAppearance.Design.Hint</item>
<item name="errorTextAppearance">@style/TextAppearance.Design.Error</item>
</style>
레이아웃에 대해이 스타일을 재정의 할 수 있습니다.
또한 내부 EditText 항목 스타일도 변경할 수 있습니다.
<style name="EditScreenTextInputLayoutStyle" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorControlNormal">@color/actionBar_background</item>
<item name="colorControlActivated">@color/actionBar_background</item>
<item name="colorControlHighlight">@color/actionBar_background</item>
<item name="colorAccent">@color/actionBar_background</item>
<item name="android:textColorHint">@color/actionBar_background</item>
</style>
이 스타일을 TextInputLayout에 적용
android:theme="@style/EditScreenTextInputLayoutStyle"
A TextinputLayout
는보기가 아니라 여기에 있는 그의 블로그 게시물 에서 Dimitrios Tsigouris 가 Layout
매우 잘 설명한대로 . 따라서, 당신은 필요하지 않습니다 에 대한 인 만하지만를 사용 . 블로그 게시물에 따라 다음 솔루션으로 끝났습니다.Style
Views
Theme
당신의 시작 styles.xml
과 함께
<style name="TextInputLayoutAppearance" parent="Widget.Design.TextInputLayout">
<!-- reference our hint & error styles -->
<item name="android:textColor">@color/your_colour_here</item>
<item name="android:textColorHint">@color/your_colour_here</item>
<item name="colorControlNormal">@color/your_colour_here</item>
<item name="colorControlActivated">@color/your_colour_here</item>
<item name="colorControlHighlight">@color/your_colour_here</item>
</style>
그리고 레이아웃에서
<com.google.android.material.textfield.TextInputLayout
android:theme="@style/TextInputLayoutAppearance"
...