คำถามนี้ถูกถามในหลาย ๆ ที่ในหลาย ๆ วิธี ฉันตอบมันมาที่นี่ แต่ฉันรู้สึกว่ามันเกี่ยวข้องในหัวข้อนี้เช่นกัน (ตั้งแต่ฉันสิ้นสุดที่นี่เมื่อฉันค้นหาคำตอบ)
ไม่มีวิธีแก้ปัญหาหนึ่งบรรทัดสำหรับปัญหานี้ แต่สิ่งนี้ใช้ได้กับกรณีการใช้งานของฉัน ปัญหาคือตัวสร้าง 'มุมมอง (บริบท, 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 ซ้ำหลายครั้งในรูปแบบที่แตกต่างกันและสถานที่ต่าง ๆ แต่ก็ไม่จำเป็นว่าชื่อของมุมมองจะตรงกับสไตล์หรือแอตทริบิวต์หรืออะไรก็ตาม นอกจากนี้เทคนิคนี้ควรทำงานกับมุมมองที่กำหนดเองไม่ได้เป็นเพียง TextViews