Установить статические поля в пользовательском представлении из 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
фактические мгновенные