Использовать атрибут 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, представление будет использовать это дополнение. Если прокладка не указана, она будет использовать заполнение по умолчанию
Ответы
Ответ 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 для дальнейшего информация.