Це питання задають у багатьох місцях дуже різними способами. Я спочатку відповів на це тут, але вважаю, що це доречно і в цій темі (оскільки я опинився тут, коли шукав відповідь).
Немає жодного рядкового рішення цієї проблеми, але це спрацювало для мого використання. Проблема полягає в тому, що конструктор 'View (контекст, 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.