Bu soru birçok yerde çok farklı şekillerde soruluyor. Aslında burada cevap verdi ama ben de bu konu ile ilgili hissediyorum (sona erdi beri burada bir cevap ararken ).
Bu sorunun tek bir çözümü yoktur, ancak bu benim kullanım durumumda işe yaradı. Sorun şu ki, 'Görünüm (bağlam, attrs, defStyle)' yapıcısı gerçek bir stile başvurmuyor, bir nitelik istiyor. O zaman yapacağız:
- Bir nitelik tanımlama
- Kullanmak istediğiniz bir stil oluşturun
- Temamıza bu özellik için bir stil uygulayın
- Bu özellik ile görünümümüzün yeni örneklerini oluşturun
'Res / değerleri / attrs.xml' bölümünde yeni bir özellik tanımlayın:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="customTextViewStyle" format="reference"/>
...
</resources>
Res / değerleri / styles.xml 'de benim özel TextView üzerinde kullanmak istediğim stili yaratacağım
<style name="CustomTextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">@color/white</item>
<item name="android:paddingLeft">14dp</item>
</style>
'Res / değerleri / themes.xml' veya 'res / değerleri / styles.xml' içinde, uygulamanızın / etkinliğinizin temasını değiştirin ve aşağıdaki stili ekleyin:
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
<item name="@attr/customTextViewStyle">@style/CustomTextView</item>
</style>
...
</resources>
Son olarak, özel TextView'inizde, yapıcıyı öznitelikle birlikte kullanabilirsiniz ve stilinizi alacaktır
public class CustomTextView extends TextView {
public CustomTextView(Context context) {
super(context, null, R.attr.customTextView);
}
}
Farklı varyantlarda ve farklı yerlerde tekrar tekrar customTextView kullandığımı belirtmek gerekir, ancak hiçbir şekilde görünümün adının stille veya nitelikle veya herhangi bir şeyle eşleşmesi gerekmez. Ayrıca, bu teknik yalnızca TextViews ile değil, herhangi bir özel görünümle çalışmalıdır.