Strings in Source Code

J

Jajobe

Erfahrenes Mitglied
14
Hallo zusammen,
Ich hab ein Problem:
Und zwar möchte ich meine App weltweit veröffentlichen.
Daher muss ich jetzt alle Hardstrings entfernen und ganz normal die Strings einfügen via string.xml, damit ich unterschiedliche Sprachen machen kann.
Nun habe ich aber im Sourcecode das hier:
Code:
public void onFinish() {
            tv.setText("Zeit abgelaufen. Trinke " + (100 -  i / 4) + "% aus deinem Glas");
            btn.setOnClickListener(null);
            btn.setVisibility(View.INVISIBLE);

Wie kann ich jetzt das "Zeit abgelaufen. Trinke" und "% aus deinem Glas" durch Strings ersetzen?
Irgendwie habe ich bei Google nichts gefunden, bzw. war vlt. einfach zu Dumm dazu :confused2:
Hoffe mir kann jemand helfen.
MfG Jannik
 
Zuletzt bearbeitet:
getString(R.string.hierdeinestringressource);
bzw. in Fragmenten getActivity().getString(...);
 
  • Danke
Reaktionen: Jajobe
Vielen Dank für die Antworten.
Ich habe das jetzt so gemacht:

Code:
public void onFinish() {
        	getString(R.string.trink);
            tv.setText((R.string.trink) + (100 -  i / 4) + "% aus deinem Glas");
            btn.setOnClickListener(null);
            btn.setVisibility(View.INVISIBLE);

Doch jetzt würfelt es mir eine falsche Zahl zusammen. Und bei dem Strunk trink wird nichts angezeigt.
MfG Jannik


Edit:
Habe es jetzt hinbekommen. Vor die Klammer musste noch das "getString".
 
Zuletzt bearbeitet:
public void onFinish() { tv.setText(getString(R.string.trink) + (100 - i / 4) + "% aus deinem Glas"); btn.setOnClickListener(null); btn.setVisibility(View.INVISIBLE);

"onFinish()" macht mich trotzdem etwas stutzig :p

Ergänzung: das "Zusammenwürfeln" von Zahlen ist nicht zusammengewürfelt...
der Code tv.setText((R.string.trink) + (100 - i / 4) + "% aus deinem Glas") zeigt einfach die RessourcenID des Strings an... Sprich die Speicheradresse unter dem der String abgespeichert wurde :p
Kannst ja mal Strg gedrückt halten und auf das R klicken, dann siehst du die RessourcenIDs (dort besser nichts ändern, anderenfalls müsstest du die R-Klasse komplett löschen und das Projekt neubauen) ;)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Jajobe
Des onFinished ist nur, weil ein Timer runter zählt und dann erst der Text erscheinen soll :biggrin:
MfG Jannik

P.S. Danke nochmal :thumbsup:
 
Code:
(R.string.trink) + (100 -  i / 4) + "% aus deinem Glas"
Ähm... Jetzt nutzt du die String-Resource und hängst doch noch einen festen String hinten an, der in anderen Sprachen so nicht richtig sein wird.

Du solltest die gesamte Ausgabe als String-Resource definieren und die Variable per Formatter ersetzen (aber das hat KatyB doch eigentlich schon gesagt).
 
Jo, um den Thread hier mal Richtung "eindeutig gelöst zu bringen" (um es späteren Lesern etwas zu erleichtern) wäre eine gute Lösung:
Code:
 tv.setText(
getString(R.string.einleitender_satzteil) + 
" " + 
(100 -  i / 4) + 
" " +
getString(R.string.schluss_satzteil));

Kleine Ergänzung:
In IntelliJ/AndroidStudio kann man unter "LiveTemplates" Tastaturkürzel setzen, um sich etwas Tipparbeit zu sparen.
Zb Könnte ein Eintrag dort so aussehen, dass man nur "gstr" eintippt, dann Tabulator drückt und die Codevervollständigung den Rest übernimmt.
 
Sorry, aber Strings sind in Java unveränderlich (immutable) und daher würde ich String-Verkettung immer vermeiden, wenn möglich. Die Garbage-Collection und Performance wird es dir danken.

In dem Fall: Eine String-Resource für den gesamten Text, mit einer Variablen. Macht auch die Internationalisierung leichter.

Resource: "Zeit abgelaufen. Trinke %1$d%% aus deinem Glas."
Verwendung: tv.setText(String.Format(getString(r.string.wieauchimmerdieresourceheisst), 100-i/4));
 
  • Danke
Reaktionen: missspelled
Strings so zu zerhacken ist nicht schön, das geht eleganter. zB so:

Code:
tv.setString( String.format(getString(R.string.msg),100-i/4) );
Code:
<string id="msg">Trinke %d%% aus deinem Glas.</string>
Add: Urks, Thyrion war schneller :) (aber der Stringformatter macht intern sicher genauso viele String-Verkettungen)
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: missspelled
Wieder was gelernt. Danke euch Zwei. :)
 

Ähnliche Themen

M
Antworten
2
Aufrufe
629
Mozart40
M
S
Antworten
9
Aufrufe
1.202
swa00
swa00
B
Antworten
7
Aufrufe
1.344
bqde
B
Zurück
Oben Unten