attrs.getAttributeIntValue始终返回默认值

时间:2014-07-02 07:33:23

标签: android view attr

我有一些视图,想要以像素为单位获得高度。从构造函数我打电话

attrs.getAttributeIntValue("http://schemas.android.com/apk/res/android", "layout_height", -1)

并始终获取默认值,但

attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "layout_height")

正常工作。 attrs.getAttributeIntValue有什么问题?

2 个答案:

答案 0 :(得分:3)

它返回默认的walue,因为layout_height是一个字符串值。它也可能是match_parentwrap_content。试试这个:

try{
    Integer.parseInt(attrs.getAttributeValue("http://schemas.android.com/apk/res/android", "layout_height") )
}catch(NumberFormatException ex){
}

答案 1 :(得分:0)

此答案特定于标题 attrs.getAttributeIntValue始终返回默认值

我不确定这是否是您的情况,但值得在以下情况下进行检查

如果在xml中设置的值是getAttributeIntValue而不是android:maxLength=@integer/max_name_length,则

android:maxLength="40"总是返回默认值

此处 max_name_length 是来自资源 attrs.xml

<integer name="max_name_length">40</integer>

您可以尝试下面的代码来获取实际值

const val ANDROID_NAME_SPACE: String = "http://schemas.android.com/apk/res/android"

private fun getAndroidAttributeIntValue(
    attrs: AttributeSet?,
    attributeName: String
  ): Int {
    val value: Int?
    val stringResourceId: Int = attrs?.getAttributeResourceValue(ANDROID_NAME_SPACE, attributeName, -1) ?: -1
    value = if (stringResourceId > 0)
      resources.getInteger(stringResourceId)
    else
      attrs?.getAttributeIntValue(ANDROID_NAME_SPACE, attributeName, -1)

    return value ?: -1
  }

用作val maxLength = getAndroidAttributeIntValue(ANDROID_NAME_SPACE, "maxLength", -1)

<EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:maxLength="@integer/max_name_length" />