Get android:padding attribute programmatically

The easiest way was to use android.R.styleable, if it had had been available. The same way it uses for getting custom attributes. R.styleable is a class which contains an int arrays of attributes values. So you need to create your own int array, which contains int values of atributes you need.

public ActivityWrapperView(Context context, AttributeSet attrs) {
    super(context, attrs);

    //check attributes you need, for example all paddings
    int [] attributes = new int [] {android.R.attr.paddingLeft, android.R.attr.paddingTop, android.R.attr.paddingBottom, android.R.attr.paddingRight}

    //then obtain typed array
    TypedArray arr = context.obtainStyledAttributes(attrs, attributes);

    //and get values you need by indexes from your array attributes defined above
    int leftPadding = arr.getDimensionPixelOffset(0, -1);
    int topPadding = arr.getDimensionPixelOffset(1, -1);

    //You can check if attribute exists (in this examle checking paddingRight)
    int paddingRight = arr.hasValue(3) ? arr.getDimensionPixelOffset(3, -1) : myDefaultPaddingRight;


}

EDIT as per @Eselfar's comment:
Don't forget to release the TypedArray: arr.recycle() !


You can just add the android:padding to your custom view's attributes.

<declare-styleable name="ActivityWrapperView">
    ...
    <attr name="android:padding" />
    ...
</declare-styleable>

And then, you can access the attribute just like your other attributes:

TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActivityWrapperView);
float padding = a.getDimension(R.styleable.ActivityWrapperView_android_padding, 0);
...
boolean hasPadding = a.hasValue(R.styleable.ActivityWrapperView_android_padding);

You should look at the getPadding____() functions.

Size, padding and margins

...

To measure its dimensions, a view takes into account its padding. The padding is expressed in pixels for the left, top, right and bottom parts of the view. Padding can be used to offset the content of the view by a specific amount of pixels. For instance, a left padding of 2 will push the view's content by 2 pixels to the right of the left edge. Padding can be set using the setPadding(int, int, int, int) or setPaddingRelative(int, int, int, int) method and queried by calling getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom(), getPaddingStart(), getPaddingEnd().

Even though a view can define a padding, it does not provide any support for margins. However, view groups provide such a support. Refer to ViewGroup and ViewGroup.MarginLayoutParams for further information.

Tags:

Android