I have my custom attr.xml
document in which I specified declare-styleable
:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Ed开发者_StackOverflowitTextValidateablePreference">
<attr name="errorMessage" format="reference" />
</declare-styleable>
</resources>
Then in layout I set:
<com.xx.yy.EditTextValidateablePreference
...
ns:errorMessage="@string/validation_email_mail_server_invalid"
/>
And in EditTextValidateablePreference.class
I get it with:
String validatorErrorMessage = attrs.getAttributeValue(PREFERENCE_NS, "errorMessage");
validatorErrorMessage
has a value like: @2131099700
How can I get its integer value to use it with:
context.getResources().getString(messageId)
?
Thanks !
There's an excellent general answer which I recommend you to refer to: Declaring a custom android UI element using XML
In particular, you should use Context.obtainStyledAttributes(AttributeSet set, int[] attrs) and TypedArray.getString(int index) instead of AttributeSet.getAttributeValue(...):
TypedArray ta = activityContext.obtainStyledAttributes(attrs, R.styleable.EditTextValidateablePreference);
String theString = ta.getString(R.styleable.EditTextValidateablePreference_errorMessage);
ta.recycle();
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.EditTextValidateablePreference); int resID = array.getResourceId(R.styleable.EditTextValidateablePreference_errorMessage, R.string.default_text);
And from this int, you can get the string by saying...
getResources().getString(resID);
精彩评论