从一个角度来看,如何以编程方式获取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值时,视图将使用此填充。 如果未指定填充,则将使用默认填充
最简单的方法是使用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; }
您可以将android:padding添加到自定义视图的属性中。
... ...
然后,您可以像访问其他属性一样访问该属性:
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);
你应该看一下getPadding____()函数。
尺寸,填充和边距
…
要测量其尺寸,视图会考虑其填充。 填充以视图的左,上,右和底部分的像素表示。 填充可用于将视图的内容偏移特定量的像素。 例如,左边的填充为2会将视图的内容推到左边缘右侧2个像素。 可以使用setPadding(int,int,int,int)或setPaddingRelative(int,int,int,int)方法设置填充,并通过调用getPaddingLeft(),getPaddingTop(),getPaddingRight(),getPaddingBottom(),getPaddingStart( ),getPaddingEnd()。
即使视图可以定义填充,它也不会为边距提供任何支持。 但是,视图组提供了这样的支持。 有关详细信息,请参阅ViewGroup和ViewGroup.MarginLayoutParams。