如何从参考格式类型的attr获取字符串?

时间:2011-10-06 15:14:55

标签: android android-layout android-xml

我有自定义attr.xml文件,我在其中指定了declare-styleable

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="EditTextValidateablePreference">
        <attr name="errorMessage" format="reference" />
    </declare-styleable>

</resources>

然后在布局中我设置:

<com.xx.yy.EditTextValidateablePreference
    ...
    ns:errorMessage="@string/validation_email_mail_server_invalid"
    />

EditTextValidateablePreference.class我得到了:

    String validatorErrorMessage = attrs.getAttributeValue(PREFERENCE_NS, "errorMessage");

validatorErrorMessage的值类似于:@2131099700

如何将其整数值用于:

context.getResources().getString(messageId)

谢谢!

2 个答案:

答案 0 :(得分:21)

我建议您参考:Declaring a custom android UI element using XML

,这是一个很好的一般性答案

特别是,您应该使用Context.obtainStyledAttributes(AttributeSet set, int[] attrs)TypedArray.getString(int index)而不是AttributeSet.getAttributeValue(...):

TypedArray ta = activityContext.obtainStyledAttributes(attrs, R.styleable.EditTextValidateablePreference);
String theString = ta.getString(R.styleable.EditTextValidateablePreference_errorMessage);
ta.recycle();

答案 1 :(得分:11)

TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.EditTextValidateablePreference);
int resID = array.getResourceId(R.styleable.EditTextValidateablePreference_errorMessage, R.string.default_text);

从这个int中,您可以通过说...

来获取字符串
getResources().getString(resID);