Как получить строку из attr с типом ссылочного формата? - PullRequest
8 голосов
/ 06 октября 2011

У меня есть пользовательский 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 ]

21 голосов
/ 28 октября 2011

Существует отличный общий ответ, на который я рекомендую вам обратиться: Объявление пользовательского элемента пользовательского интерфейса Android с использованием XML

В частности, вы должны использовать Context.obtainStyledAttributes (AttributeSetset, 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();
11 голосов
/ 29 октября 2011
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.EditTextValidateablePreference);
int resID = array.getResourceId(R.styleable.EditTextValidateablePreference_errorMessage, R.string.default_text);

И из этого int вы можете получить строку, сказав ...

getResources().getString(resID);
...