我有一些视图,想要以像素为单位获得高度。从构造函数我打电话
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
有什么问题?
答案 0 :(得分:3)
它返回默认的walue,因为layout_height
是一个字符串值。它也可能是match_parent
或wrap_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" />