androidandroid-xmlandroid-resourcestyped-arraysdeclare-styleable

How to define an array of integers in a declare-styleable?


I'm implementing my own <declare-styleable> for a custom View (following the instructions here). I'd like to be able to specify an array of integers as one of the possible XML attributes. How do I:

  1. Specify the integer array as an XML attribute in attrs.xml?
  2. Get it from the TypedArray after calling obtainStyledAttributes() in my custom View?

Solution

    1. You can declare it as a reference.

      <declare-styleable name="MyView">
          <attr name="array" format="reference"/>
      </declare-styleable>
      
    2. It looks like TypeArray hasn't getIntArray method so you have to get it directly from the resources.

      final TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyView);
      final int id = array.getResourceId(R.styleable.MyView_array, 0);
      
      if (id != 0) {
          final int[] values = getResources().getIntArray(id);
      }
      
      array.recycle()