how to get AttributeSet properties

前端 未结 1 1843
北海茫月
北海茫月 2020-12-24 02:51

Suppose i have a class which extends ViewGroup

public class MapView extends ViewGroup

It is included in the layout map_controls.xml

相关标签:
1条回答
  • 2020-12-24 03:16

    In the general case, you do like this:

    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();
    }
    

    Pay attention to how the indexes of the elements in in attrsArray matter. However, in your particular case, it works just as good to use the getters, like you discovered yourself:

    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();
    }
    

    This works because the attribute you have on com.xxx.map.MapView are basic attributes that the View base class parses in its constructor. If you want to define your own attributes, take a look at this question and the excellent answer: Declaring a custom android UI element using XML

    0 讨论(0)
提交回复
热议问题