Использовать атрибут android: padding - программирование

Использовать атрибут android: padding

С точки зрения, как я могу программно получить значение атрибута android: padding? В настоящее время я использую:

private static final String ANDROID_NAMESPACE = "http://schemas.android.com/apk/res/android";
private static final String ATTRIBUTE_PADDING = "padding";

public ActivityWrapperView(Context context, AttributeSet attrs) {
    super(context, attrs);
    int padding = attrs.getAttributeIntValue(ANDROID_NAMESPACE, ATTRIBUTE_PADDING, -1);
}

Это возвращает -1, я также попытался использовать "android: padding" в качестве имени атрибута, но -1 все еще возвращается.

РЕДАКТИРОВАТЬ: Мое требование: когда в формате XML указано значение android: padding, представление будет использовать это дополнение. Если прокладка не указана, она будет использовать заполнение по умолчанию

4b9b3361

Ответ 1

Самый простой способ - использовать android.R.styleable, если бы он был доступен. Точно так же он используется для получения пользовательских атрибутов. R.styleable - это класс, который содержит int массивы значений атрибутов. Поэтому вам нужно создать свой собственный массив int, который содержит значения int, необходимые вам.

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;


}

Ответ 2

Вы можете просто добавить android:padding к своим пользовательским атрибутам вида.

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

И тогда вы можете получить доступ к атрибуту так же, как и другие ваши атрибуты:

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

Ответ 3

Вы должны посмотреть на функции getPadding____().

Размер, отступы и поля

...

Чтобы измерить его размеры, в представлении учитывается его отступы. padding выражается в пикселях для левого, верхнего, правого и нижнего части обзора. Заполнение может использоваться для смещения содержимого просматривать определенное количество пикселей. Например, левое дополнение 2 будет нажимать содержимое представления на 2 пикселя справа от левой край. Заполнение может быть установлено с помощью setPadding (int, int, int, int) или setPaddingRelative (int, int, int, int) и запрашивается путем вызова getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom(), getPaddingStart(), getPaddingEnd().

Даже если представление может определять заполнение, оно не предоставляет никаких поддержка маржи. Однако группы просмотра предоставляют такую ​​поддержку. См. ViewGroup и ViewGroup.MarginLayoutParams для дальнейшего информация.