TextinputLayout의 레이블 색상을 변경하고 android 텍스트 밑줄을 편집하는 방법


121

나는 안드로이드 디자인 라이브러리의 TextinputLayout. 그러나 EditText내부 의 힌트 색상, 레이블 색상 및 밑줄 색상을 사용자 정의 할 수 없습니다 TextinputLayout. 도와주세요.


1
디자인 가이드 라인에 따라 강조 색이 있어야 하죠?
Raghunandan 2015

하지만 테마의 강조 색상과 다른 색상의 editText를 많이 가질 것입니다.
Nitesh Verma 2015


레이블 색상을 변경하려면 여기 에서 내 대답을 확인 하십시오
Summved Jain

모두가 집중하고 산만 상태에 지정된 사용자 정의 배경 당김 사용하여 내가 안정적으로 밑줄을 바꿀 수 stackoverflow.com/a/36543554/2413303
EpicPandaForce

답변:


257

하단 라인 색상 변경 :

<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 덕분에


힌트 색상을 변경할 수 없습니다 (라벨이 아닌 경우).
Nitesh Verma 2015

내 앱 크기에 대해 정말 걱정하고 있는데, 내 앱에 추가 할 크기가 얼마나 될지 알 수 있나요?
Nitesh Verma 2015

죄송합니다. 질문을받지 못했습니다. 자세한 내용을 설명해주세요. 어떤 맥락에서 크기, 앱 무게의 그래픽 크기 (예 : apk가 20mb 이상인 경우), 그리고 이전에 내 답변을 수락하고 다시 수락을 제거합니다. , 그래?
판 카즈 아 로라

becoz, 귀하의 답변에 따라 힌트 색상을 변경할 수 없습니다. 그것의 일부는 나를 위해 일했지만 이것은 내가 요청한 것에 대한 완전한 해결책이 아닙니다. 앱 크기와 관련하여 Material EdiTText와 같은 외부 라이브러리를 추가하면 앱 크기가 증가하지 않습니까?
Nitesh Verma 2015

4
@NiteshVerma는 플로팅 레이블이 아닌 경우 힌트 색상을 설정하는 솔루션을 찾았습니다. 간단히 XML로 설정 android:textColorHint했습니다 TextInputLayout.
AlbAtNf

30

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>

집중 :

집중

초점없이 :

초점없이

에러 메시지:

여기에 이미지 설명 입력


9
"포커스 없음"예제에서 핑크색을 얻으려면 어떻게해야합니까?
John Smith

이 스타일을 사용하는 방법?
Hanzala

24

으로 재료 구성 요소 라이브러리 당신은을 사용할 수 있습니다 com.google.android.material.textfield.TextInputLayout.

사용자 지정 스타일을 적용하여 색상을 변경할 수 있습니다.

힌트 색상을 변경하려면 다음 속성을 사용해야합니다.
hintTextColorandroid: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"
    ...>

1
TextinputLayout 내에서 EditText의 밑줄 색상을 변경하는 방법은 무엇입니까? 집중되지 않은 상태를 의미합니다. 그것은 잿빛이다
Evgenii Vorobei

@EvgeniiVorobei 답변에 설명되어 있습니다. 에 의해 정의됩니다 boxStrokeColor. 예 selector_stroke_color에서 특히 마지막 줄은 다음과 같습니다.<item android:alpha="0.38" android:color="?attr/colorOnSurface"/>
Gabriele Mariotti 2019 년

정말 감사합니다! 나는 그것을 스스로 알아낼 수 없었다.
Evgenii Vorobei

내 문제는 힌트 색상을 회색으로 만들고 편집 텍스트가 채워지면 초점이 맞든 아니든 오렌지색이 되길 원한다는 것입니다. 집중할 때 할 수 있습니다. 하지만 그렇지 않을 때는 할 수 없습니다. 그래서 찬 당신이 그것을 도와주세요 @GabrieleMariotti
Anmol317


17

블로그 포스트 의 다양한 스타일링 측면에 대해 설명 EditText하고 AutoCompleteTextView래핑을 TextInputLayout.

들어 EditText22.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));
        }
    }
});

8

당신이 변경하려는 경우 바 / 선 색상과 힌트 텍스트 색상 의을 TextInputLayout(악센트 색상은 일반적으로 무엇인지), 다음 그냥이 스타일을 만들 :

<style name="MyStyle">
    <item name="colorAccent">@color/your_color</item>
</style>

그런 다음 테마TextInputLayout 로 적용하십시오 .

<android.support.design.widget.TextInputLayout
    ...
    app:theme="@style/MyStyle" />

이것은 기본적으로 테마 (스타일이 아님)를 하나의보기로 설정합니다 (전체 활동이 아니라).


Min SDK는 21이어야합니다
Azizjon Kholmatov 2019

5
<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 항목 스타일도 변경할 수 있습니다.


이 스타일을 사용하는 방법? 한 곳에서 모든 앱의 스타일을 재정의하는 방법이 있습니까?
Hanzala

5
<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에 적용


2
: TextInputLayout에 스타일을 적용하기위한 단지 빠른 노트android:theme="@style/EditScreenTextInputLayoutStyle"
jackycflau

5

A TextinputLayout는보기가 아니라 여기에 있는 그의 블로그 게시물 에서 Dimitrios TsigourisLayout매우 잘 설명한대로 . 따라서, 당신은 필요하지 않습니다 에 대한 인 만하지만를 사용 . 블로그 게시물에 따라 다음 솔루션으로 끝났습니다.StyleViewsTheme

당신의 시작 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"
...

1
부모에서 Widget.MaterialComponents.TextInputLayout.OutlinedBox 사용
Sudip Sadhukhan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.