我试图创建一个相对简单的自定义视图,根据代码的位置,xml描述一个离散值("100dp")或一个资源值("@dimen/standardWidth")。
我不知道如何检查返回的值是resid、integer还是dimension(因为getdimenion()、getint()和getresourceid()返回的值看起来都一样)。
我使用以下代码:

<declare-styleable name="LabeledView">
    ...
    <attr name="labelWidth" format="dimension|reference"/>
    ...
</declare-styleable>

在我的自定义视图中,我使用以下命令:
    if (attrs!=null) {
        TypedArray typedArray = getContext().obtainStyledAttributes(
            attrs, R.styleable.LabeledView, 0, 0);

        int labelWidth = typedArray.getResourceId(R.styleable.LabeledView_labelWidth, -1);

在上面的例子中labelWidth等于2131165193,因为它实际上是@dimen的resid。

最佳答案

只使用尺寸格式,不使用参考。但是,可以对属性使用引用值。它们应该被理解为实际尺寸。

<attr name="labelWidth" format="dimension"/>

typedArray.getDimensionPixelSize

08-15 22:20