Студия Android раздувает пользовательские Представления или ViewGroups, которые они уже определили, большинство из которых вы не можете видеть, потому что они являются закрытыми классами.
Вот пример того, как вы сделаете это в коде.
class Test extends android.support.v7.widget.AppCompatTextView {
public Test(Context context) {
super(context);
initTestView(null);
}
public Test(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
initTestView(attrs);
}
public Test(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initTestView(attrs);
}
public void initTestView(AttributeSet as) {
if (as != null) {
TypedArray ta = getContext().obtainStyledAttributes(as, R.styleable.Test);
String textOverride = ta.getString(R.styleable.Test_override);
ta.recycle();
setText("Test: " + textOverride);
}
}
}
Тогда вы определите стиль в app/src/main/res/values/attr.xml
<declare-styleable name="Test">
<attr name="override" format="string" />
</declare-styleable>
Теперь, когда Android надувает это, он может видеть ваш пользовательский класс, а также атрибуты для его создания. Если бы вы добавили это в макет, он автоматически генерировал бы пример моего кода. Это то же самое, что и у базовых стилей Views / ViewGroups для Android, и они часто будут иметь значения по умолчанию или видимые представления этого класса, поскольку они надуваются и прикрепляются к своим родительским представлениям.
Чтобы было совершенно ясно, когда вы добавляете Android View в свой макет, скажем, для простоты.
<TextView
android:id="@+id/hello"
android:text="@string/greeting"/>
Класс для TextView делает то же самое, что и мой метод initTestView
, захватывая его типизированные свойства (text, id) и заполняя внутренние представления или значения. По сути, Android склеивает значения xml с их представлениями классов.