В общем случае вы делаете так:
public MapView(Context context, AttributeSet attrs) {
// ...
int[] attrsArray = new int[] {
android.R.attr.id, // 0
android.R.attr.background, // 1
android.R.attr.layout_width, // 2
android.R.attr.layout_height // 3
};
TypedArray ta = context.obtainStyledAttributes(attrs, attrsArray);
int id = ta.getResourceId(0 /* index of attribute in attrsArray */, View.NO_ID);
Drawable background = ta.getDrawable(1);
int layout_width = ta. getLayoutDimension(2, ViewGroup.LayoutParams.MATCH_PARENT);
int layout_height = ta. getLayoutDimension(3, ViewGroup.LayoutParams.MATCH_PARENT);
ta.recycle();
}
Обратите внимание на значение индексов элементов в attrsArray . Однако, в вашем конкретном случае, использование геттеров работает так же хорошо, как вы открыли сами:
public MapView(Context context, AttributeSet attrs) {
super(context, attrs); // After this, use normal getters
int id = this.getId();
Drawable background = this.getBackground();
ViewGroup.LayoutParams layoutParams = this.getLayoutParams();
}
Это работает, потому что у вас есть атрибут com.xxx.map.MapView
являются базовыми атрибутами, которые базовый класс View
анализирует в своем конструкторе. Если вы хотите определить свои собственные атрибуты, взгляните на этот вопрос и отличный ответ: Объявление пользовательского элемента пользовательского интерфейса Android с использованием XML