이 질문은 많은 다른 장소에서 많은 다른 방법으로 요구됩니다. 나는 원래 여기에 대답했지만이 스레드와 관련이 있다고 생각합니다 ( 답을 찾을 때 여기에 있었기 때문에 ).
이 문제에 대한 한 가지 해결책은 없지만 내 유스 케이스에서 효과가있었습니다. 문제는 'View (context, attrs, defStyle)'생성자가 실제 스타일을 참조하지 않고 속성을 원한다는 것입니다. 그래서 우리는 :
- 속성 정의
- 사용하려는 스타일 만들기
- 테마에 해당 속성에 대한 스타일 적용
- 해당 속성을 사용하여 뷰의 새 인스턴스를 만듭니다.
'res / values / attrs.xml'에서 새 속성을 정의하십시오.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
res / values / styles.xml '에서 사용자 정의 TextView에 사용하려는 스타일을 작성하겠습니다.
<style name="CustomTextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">14dp</item>
</style>
'res / values / themes.xml'또는 'res / values / styles.xml'에서 애플리케이션 / 활동의 테마를 수정하고 다음 스타일을 추가하십시오.
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
마지막으로, 사용자 정의 TextView에서 속성과 함께 생성자를 사용할 수 있으며 스타일을받습니다.
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
다른 변형과 다른 장소에서 customTextView를 반복해서 사용했다는 점은 주목할 가치가 있지만, 뷰의 이름이 스타일이나 속성 또는 다른 것과 일치 할 필요는 없습니다. 또한이 기술은 TextView뿐만 아니라 모든 사용자 정의보기에서 작동해야합니다.