android - 获取安卓:padding attribute programmatically

标签 android

从一个角度来看,如何以编程方式获取 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 值时, View 将使用此填充。如果未指定填充,它将使用默认填充

最佳答案

最简单的方法是使用 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;


}

根据@Eselfar 的评论进行编辑:
别忘了释放 TypedArray: arr.recycle() !

关于android - 获取安卓:padding attribute programmatically,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18141125/

相关文章:

android - 在实际设备中,ACTION_BATTERY_CHANGED 发送的频率如何?

android - 如何在Android studio中查找引用资源实现?

android - 屏幕锁定时在 Android 中显示警报

java - Android 位图压缩错误

Java - 标记为私有(private)的字段仍然可以在主函数中更改吗?

java - 如何在Google Map中设置几个特定位置?

Android: float 操作按钮的定位不可预测

javascript - Webview 不显示 JavaScript 警报

java - Android 谷歌地图致命异常

android - 向 CTS 和构建中添加新的测试包