从一个角度来看,如何以编程方式获取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);
}
Run Code Online (Sandbox Code Playgroud)
这返回-1,我也尝试使用"android:padding"作为属性名称,但仍然返回-1.
编辑:我的要求:当在布局XML中指定android:padding值时,视图将使用此填充.如果未指定填充,则将使用默认填充
coo*_*rok 18
最简单的方法是使用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;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以将 添加android:padding到自定义视图的属性中。
<declare-styleable name="ActivityWrapperView">
...
<attr name="android:padding" />
...
</declare-styleable>
Run Code Online (Sandbox Code Playgroud)
然后,您可以像访问其他属性一样访问该属性:
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13281 次 |
| 最近记录: |