2017-02-09 9 views
3

하나의 테마로 TextInputLayout'shinterror에 사용자 정의 스타일을 적용하고이를 전역 적으로 적용합니다. 즉, styles.xml에서 정의한 다음 필요없이 앱 전체에서 사용되는 모든 TextInputLayouts에 적용합니다.안드로이드 | styles.xml을 사용하여 TextInputLayout의 테마 변경

styles.xml

: 우리는이 같은 Button 위젯을 할 수

<android.support.design.widget.TextInputLayout 
    android:id="@+id/usernameWrapper" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/email_username" 
    android:textColorHint="@color/grey_text" 
    app:theme="@style/my_custom_style"> 

<style name="my_custom_style" parent="Widget.Design.TextInputLayout"> 
    <item name="android:textColorHint">@color/success_accent</item> 
    <item name="android:textSize">20sp</item> 
</style> 

뭔가처럼이 같은 그것을 인라인를 추가

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="buttonStyle">@style/my.Widget.Button</item> 
    <item name="android:buttonStyle">@style/my.Widget.Button</item> 
</style> 

<style name="my.Widget.Button" parent="@android:style/Widget.TextView"> 
    <item name="android:gravity">center</item> 
    <item name="android:textSize">@dimen/some_dimen</item> 
    <item name="android:textAllCaps">false</item> 
</style> 

참고 : 나는 현재 최후의 수단로 TextInputLayout를 서브 클래 싱 을 고려, 그래서 당신은 대답하면서,이 점을 염두에 두시기 바랍니다하고있다.

감사합니다 :)

답변

6

불행하게도, TextInputLayout 위젯, 그리고 기본 스타일의 위해 글로벌 테마 속성을 정의하지 마십시오 디자인 지원 라이브러리에있는 모든 위젯을 보인다. 따라서 기본 스타일을 쿼리하기 위해 사용자 지정 테마 특성을 지원하도록 서브 클래 싱을 수행하고 대신 모든 하위 클래스를 사용하는 것 이외에는 스타일을 전역으로 사용자 지정할 수 없습니다.

Widget.Design.TextInputLayout 스타일은 테마에 정의 된 속성을 찾을 수없는 경우 위젯이 다시 폴링되는 기본 스타일로 여전히 하드 코드되어 있으므로 기존의 구현과 다를 수 있습니다 .

디자인 지원 라이브러리 개발자는 기본 테마 속성을 정의 할 때 제대로 작동하려면 현재 테마에 있어야한다고 오해하고있는 것으로 보입니다. 이 문제는 TabLayout에 대해 이전에 reported 이었지만이 추론에 따라 닫 혔고 이후의 쿼리 및 설명은 추가 응답을 생성하지 않았습니다. 필요한 설명을 추가하여 AOSP 이슈 트래커에서 다른 티켓을여십시오. 잘하면 그것은 더 나은 요금일지도 모른다.

-2

그냥 당신이 시도 않았고, 큰 소리로 여기 생각? 앱 전체에 색상 힌트가 변경되어야하지만, 원하는 경우이 방법을 사용하면 문제를 해결하는 데 도움이 될 수 있습니다.

<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="android:textColorHint">@style/text_hint_appearance</item> 
</style> 

<style name="text_hint_appearance" parent="@android:style/TextAppearance"> 
    <item name="android:textColorHint">@color/success_accent</item> 
</style> 
+0

'android : textColorHint'는 테마 속성이 아닌 스타일 속성이므로 테마에 정의 할 수 없습니다. 대신에 android : textAppearance 테마 속성을 사용 하시겠습니까? 'TextInputLayout'은 실제로'EditText' 대신'LinearLayout'을 확장하는 래퍼 클래스이고 기본 텍스트 모양을 고려하지 않는 자체 힌트 그리기 메커니즘을 제공하기 때문에 이것도 작동하지 않습니다. – corsair992