2011-10-04 11 views
12

Powiedzmy mam ten ciąg:Handling Android dynamiczny tekst w res/wartości

Odtwarzacz posiada dobrą opiekun umiejętności i porządni ludzi umiejętności

obecnie część nie w pogrubienie łańcucha jest zawsze takie samo, co jest znane w czasie wykonywania, część pogrubioną.

Więc jak mógłbym zrobić coś takiego:

Odtwarzacz posiada {var1} opiekun umiejętności i {VAR2} ludzi umiejętności

a następnie wypełnić te vars przy starcie z prawidłowe wartości?

nie chcę do łączenia ciągów takie jak:

"You player has a" + var1 + "keeper skill and a" + var2 + "people skill" 
+0

'Resources.getString (resId, ...)' lub 'Context.getString (resId, ...)' z łańcuchem podobnym do '' Gracz ma umiejętność opiekuna% 1 $ s i umiejętność% 2 $ s ludzi "' czego szukasz? – Salw

Odpowiedz

33

trzeba zobaczyć Android zasobów ciąg instrukcji. Istnieje sposób na zapewnienie statycznego łańcucha, który może być później sformatowany za pomocą zmiennych.

http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling

będzie zdefiniować ciąg jak

<resources> 
    <string name="welcome_messages">Hello, %1$s! You have &lt;b>%2$d new messages&lt;/b>.</string> 
</resources> 

A później w kodzie można zastąpić

Resources res = getResources(); 
String text = String.format(res.getString(R.string.welcome_messages), username, mailCount); 
CharSequence styledText = Html.fromHtml(text); 
+0

tnx, twoja odpowiedź została zaakceptowana dla kompletności w linkach i kodzie. – dierre

+0

więcej informacji na temat formatowania tokenów ciągu na http://developer.android.com/reference/java/util/Formatter.html – stackuser83

7

w Strings.xml

You player has a %1$d keeper skill and a %2$d people skill 

w Javie

getString(R.string.article_stats, var1, var2); 
4

Tak, zobacz następujące tematy od android devguide

Jeśli trzeba formatować ciągi przy użyciu String.format(String, Object...), to można to zrobić poprzez umieszczenie swoich argumentów formatu w zasobie strun. Na przykład, z następującym zasobu:

<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string> 

W tym przykładzie ciąg formatu ma dwa argumenty:% 1 $ s jest ciągiem znaków i% 2 $ d jest liczbą dziesiętną. Można sformatować ciąg z arguements z aplikacji tak:

Resources res = getResources(); 
String text = String.format(
    res.getString(R.string.welcome_messages), 
    username, mailCount); 
3

w ciągi XML trzeba określić składni HTML w znaczniku CDATA jak

<![CDATA[<b> %1$s bought </b>, last purchased from %2$s <b> %3$s </b>]]> 

aw swojej klasie java

String detail = String.format(getString(R.string.detail),15,"New Delhi","23 mins ago"); 
     detailView.setText(Html.fromHtml(detail)); 
+0

Wypróbowałem każde dostępne rozwiązanie tylko to zadziałało. – maheshsgr