모든 EditText에 일관된 스타일 설정 (예 :)


84

EditText내 응용 프로그램의 모든 것이 일관되게 보이 도록 노력하고 있습니다. 다음과 같이 할 수 있다는 것을 알고 있습니다.

<style name="App_EditTextStyle">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

그런 다음 다음 EditText을 수행 하여 특정 스타일을 만들 수 있습니다 .

<EditText ...
    style="@style/App_EditTextStyle
    ...>

그러나 이렇게하면 EditText오류가 발생하지 않더라도 지루한 애플리케이션의 모든 스타일을 개별적으로 설정하는 것을 기억해야합니다 .

이것을 테마의 일부로 만들 수있는 방법이 있습니까? 따라서이 스타일을 모든 EditText. 다음과 같은 가상의 코드 블록 :

<style name="App_Theme" parent="@android:style/Theme.Holo">
   ... 
   <item name="android:EditTextSyle">@style/App_EditTextStyle</item>
   ...
<style>

그리고 내 안에 다음 AndroidManifest.xml과 같은 것이 있습니다.

<application
    ....
    android:theme="@style/App_Theme">

그리고 짜잔! 내 모든 것은 EditText각 인스턴스에 대한 스타일을 지정할 필요없이 일관된 스타일을 갖습니다.

답변:


155

사용자 정의 테마에서 EditTextstyle (named editTextStyle:))을 가리키는 속성을 재정의하십시오 .

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="android:editTextStyle">@style/App_EditTextStyle</item>
</style>

확장 할 사용자 정의 스타일을 만듭니다 Widget.EditText.

<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

편집하다:

훨씬 새로운 AppCompat 관련 테마를 사용하는 경우 android 접두사없이 editTextStyle 속성을 사용하십시오.

<style name="App_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

3
이것은 너무 그럴듯하고 논리적으로 들리지만 저에게는 효과가없는 것 같습니다. 내가 뭔가를 놓칠 수 있을까요?
코드 시인

1
@ManishGupta 정확히 어떻게 작동하지 않습니까? 나는 위의 스타일을 테스트했고 그들은 작동하지만 layout_height/height안드로이드는 아마도 테마의 스타일 전에 해당 속성을 확인하고 누락에 대해 불평하기 때문에 거기에 넣을 수 없습니다. 그러나 사용자 정의 드로어 블 + 다른 텍스트 색상이 위와 함께 작동합니다.
사용자

나는 당신이 설명하는대로 정확하게 설정했습니다. 내가 다시 게시하는 것은 의미가 없습니다. 어쨌든 나는 이것을 당신에게 줄 것입니다. 어딘가에 뭔가 빠졌습니다. 당신이 처방하는 것은 차가운 논리이며 효과가 있습니다. 식은 후 다시 방문하겠습니다. 감사.
Code Poet

3
@ toobsco42 edittextStyle는에 적용되지 않습니다 AutoCompleTextView(임에도 불구하고 EditText). autoCompleteTextViewStylestyle.xml Widget.AutoCompleTextView파일 의 스타일 을 가리키는 theme.xml 의 속성을 살펴보십시오 .
사용자

3
나에게도 작동하지 않습니다. 하지만 난이 변경 될 경우 <item name="android:editTextStyle"><item name="editTextStyle">, 그것의 확인. 감사!
Sam Sch

52

@Luksprog 대답은 정확하지만 나를 위해 작동하지 않습니다. 몇 가지 실험 후 editTextStyle에서 android 네임 스페이스를 제거하면 작동한다는 것을 알았습니다.

<style name="App_Theme" parent="@android:style/Theme.Holo">
   <item name="editTextStyle">@style/App_EditTextStyle</item>
</style>

확장 할 사용자 정의 스타일을 만들 Widget.EditText거나 AppCompat 테마를 사용하는 경우 Widget.AppCompat.EditText:

<style name="App_EditTextStyle" parent="@android:style/Widget.EditText">
    <item name="android:background">@drawable/filled_roundededges_box_dark</item>
    <item name="android:textColor">#808080</item>
    <item name="android:layout_height">45dip</item>
</style>

1
나에게도 작동합니다. 하지만 왜 이렇게 작동합니까?
Eagle_Eye

3
AppCompat도서관 과 관련이있을 수 있습니다. 활동이 확장 AppCompatActivity됩니까? 오, 안드로이드 개발의 미스터리.
Matt Zukowski 2016 년

1
@MattZukowski는 귀하의 의견을 기반으로 몇 가지 조사를 수행했습니다. 가능한 원인 : 앞으로는 AppCompat v7:21+스타일에 "android :"접두사없이 표준 테마 속성을 사용해야합니다.
iflp

이것에 대해 감사합니다.
Adam Varhegyi

Widget.AppCompat.EditText를 사용하지 않아도 잘 작동합니다.하지만 Widget.AppCompat.EditText에 액세스 할 수 없습니다. "can not resolve symbol '@android : style / Widget.AppCompat.EditText'"
Neri

18

먼저 EditText의 스타일을 정의하십시오. 부모 스타일이android:Widget.EditText

<style name="CustomEditTextStyle" parent="android:Widget.EditText">

    <item name="android:textColor">#0F0F0F</item>
    <!-- ... More items here if needed ... -->
</style>

그 후 android:editTextStyle사용자 정의 테마 의 속성 을 재정의하십시오 . 지원 라이브러리를 사용하는 경우 속성도 재정의해야합니다 editTextStyle(android 네임 스페이스없이).

<style name="App_Theme" parent="...">
   <item name="android:editTextStyle">@style/CustomEditTextStyle</item>
   <item name="editTextStyle">@style/CustomEditTextStyle</item> <!-- For compatibility with the support library -->
</style>

1

텍스트 색상과 같은 몇 가지 간단한 매개 변수 만 설정해야하는 경우 Android 네임 스페이스에는 편집 텍스트에 대해 별도의 스타일을 선언 할 필요없이이를 수행하는 몇 가지 매개 변수가 있습니다. 예

<style name="MyStyle" parent="android:Theme.Material.NoActionBar">
    <item name="colorPrimary">@color/black</item>
    <item name="colorPrimaryDark">@color/white</item>
    <item name="colorAccent">@color/white</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:editTextColor">@color/black</item>
    <item name="android:editTextBackground">@color/black</item>
    ....
</style>

APPCOMPAT 사용의 새로운 버전 editTextColor및 삭제 android:.
Armin

-2
<style name="App_Theme" parent="@android:style/Theme.Holo">    
    <item name="android:editTextBackground">@drawable/filled_roundededges_box_dark</item>
</style>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.