R.string.value отображается в виде числа - PullRequest
7 голосов
/ 26 сентября 2011

Для приведенного ниже кода я намеревался получить системную дату и отобразить ее в соответствии с форматированием текущей локали, это просто для R.string.date.В эмуляторе он всегда отображается в виде длинного числа (что-то вроде 821302314) вместо «Дата:», которое я уже отображал в string.xml.Может кто-нибудь помочь взглянуть, почему это так?

final TextView mTimeText = (TextView)findViewById(R.id.mTimeText);

//get system date
Date date = new Date();
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
mTimeText.setText(R.string.date + " " + dateFormat.format(date));

layout.xml

<TextView 
android:id="@+id/mTimeText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"   
android:text="@string/date"
/>

strings.xml

<string name="date">Date:</string>

Ответы [ 4 ]

12 голосов
/ 26 сентября 2011

R.string.date действительно int, вы пропускаете вызов getText() или getString():

mTimeText.setText(getText(R.string.date) + " " + dateFormat.format(date));

Еще лучше, не создавайте строку в своем коде, а используйте шаблон с getString(int resId, Object... formatArgs):

mTimeText.setText(getString(R.string.date, dateFormat.format(date)));

и в вашем string.xml:

<string name="date">Date: %s</string>
7 голосов
/ 26 сентября 2011

Да, вы получите идентификатор строки, если будете использовать R.string.date.Как указано в документах

Вы можете использовать getString (int) или getText (int) для извлечения строки.getText (int) сохранит все стили расширенного текста, примененные к строке.

Пример:

 this.getString(R.string.date);

Прочтите об этом здесь: getString

5 голосов
/ 26 сентября 2011

Чтобы получить строковое значение из xml, вы должны вызвать this.getString(R.id.nameOfString).В вашем случае это будет mTimeText.setText(this.getString(R.string.date) + " " + dateFormat.format(date));

0 голосов
/ 22 июня 2017

Чтобы переопределить все "R.string. *" до "getString (R.string. )" * я написал небольшое регулярное выражение.

Это регулярное выражение также игнорирует строки, у которых уже есть "getString" впереди.

((?!getString\() R\.string\.[a-zA-Z1-9_]+)

Вам просто нужно нажать Strg + Shift + R в Android Studio, чтобы открыть терминал замены и вставить вышеприведенное регулярное выражение в качестве «Найти» и в качестве «замены» приведенное ниже регулярное выражение.

 getString\( $1 \)

Не забудьте установить флажок "регулярное выражение".

Для меня это сработало идеально. Но у «Найти регулярное выражение» есть одна проблема: он находит R.string только тогда, когда начинается с пробела. Я не знаю, как решить эту проблему, потому что, если я удалю пробел, я найду также строку R., у которой уже есть "getString".

Может кто-то может помочь улучшить регулярное выражение или найдет лучший способ достичь этого.

...