Установить статические поля в пользовательском представлении из XML

Это пользовательский вид

public class MyView extends Button {
    private static int color;

    . . . 
}

Этот XML создает экземпляр MyView несколько раз

<LinearLayout . . .>

    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />

</LinearLayout>

Я хочу знать, как правильно инициализировать статический color из XML.
Я знаю уже одно решение (но мне интересно, есть ли другой рекомендуемый способ):

  • Определить пользовательский атрибут
<declare-stylable name=MyView>
    <attr name="color" format="integer" />
</declare-stylable>
  • Используйте пользовательский атрибут при создании любого MyView
<com.example.test.MyView
    app:color="@color/red"
    . . ./>
  • Установите статическое поле во время конструктора MyView

TypedArray a = context.getTheme(). GetStyledAttributes (attrs, R.styleable.MyView, defStyle, 0);
int c = a.getInteger (R.styleable.MyView_color, -1);
if (c! = -1) color = c;

Единственное, что мне не нравится в этом решении, это то, что оно зависит от MyView экземпляры, как правило, в коде, статические поля и методы могут быть доступны независимо, поэтому я хотел бы знать, есть ли способ, которым я могу установить статическое поле также независимо от MyView фактические мгновенные

0 ответов

Другие вопросы по тегам