HTML in String-Ressource?

Ich weiß, ich kann escaped HTML-Tags in String-Ressourcen setzen. Allerdings, wenn ich den Quellcode für die Kontakte-Anwendung betrachte, kann ich sehen, dass sie eine Möglichkeit haben, den HTML nicht zu codieren. Zitat aus der Kontaktanwendung strings.xml :

<string name="contactsSyncPlug"><font fgcolor="#ffffffff">Sync your Google contacts!</font> \nAfter syncing to your phone, your contacts will be available to you wherever you go.</string> 

Leider, wenn ich etwas ähnliches ausprobiere (wie Hello, <b>World</b>! ), getString() die Zeichenfolge ohne die Tags (ich kann das in logcat ). Warum das? Wie bekomme ich die Original-String mit Tags und alles? Wie funktioniert die Kontaktanwendung?

  • Android-App stürzt ab, wenn sie im Debug-Modus gestartet wird
  • Beginnend mit Android: Java oder Python (SL4A)
  • Wie kann ein WebView Farben aus dem aktuellen Android-Thema erben?
  • Wie kann man lange Pressereignisse für Listview-Item einer ListActivity erfassen?
  • Wie kann man mehrere Strings in Android XML verketten?
  • Hinzufügen einer Schaltfläche unter einer Listenansicht auf Android
  • Die Android-Appbarlayout-Erhebung wird in der Statusleiste angezeigt
  • Wie füge ich MediaPlayer mit SurfaceView in Android an?
  • Wie kann man sagen, ob der Bildschirm mit ADB
  • Swipe zum Löschen für eine benutzerdefinierte Ansicht nicht für Listenelement
  • Wie optimiere ich das Bild wie Facebook und WhatApp?
  • SimpleDateFormat (String-Vorlage, Locale-Gebietsschema) mit zB Locale.US für ASCII-Daten
  • 4 Solutions collect form web for “HTML in String-Ressource?”

    Sie können auch Ihre html in einem CDATA-Block auch umgeben und getString wird Ihre tatsächliche HTML zurückgeben. Wie so:

     <string name="foo"><![CDATA[Foo Bar <a href="foo?id=%s">baz</a> is cool]]></string> 

    Jetzt, wenn du einen getString (R.string.foo) ausführt, wird der String HTML. Wenn du den HTML (mit dem Link wie gezeigt) über eine anklickbare TextView rendern musst, musst du einen Html.fromHtml (…) Aufruf ausführen, um den spannbaren Text zu erhalten.

    Es scheint getString() tut genau das – bekommt einen String . Um dies zu benutzen, musst du getText() (und nicht mehr Html.fromHtml() ) verwenden, dh:

     mTextView.setText(getText(R.string.my_styled_text)); 

    Allerdings scheint es die android:text Eigenschaft macht genau das gleiche, und das folgende ist gleichwertig:

     <TextView android:text="@string/my_styled_text" /> 

    Und in strings.xml :

     <string name="my_styled_text">Hello, <b>World</b>!</string> 

    Die beste Lösung ist, Ressourcen in einer Weise zu nutzen:

     <string name="htmlsource"><![CDATA[<p>Adults are spotted gold and black on the crown, back and wings. Their face and neck are black with a white border; they have a black breast and a dark rump. The legs are black.</p><p>It is similar to two other golden plovers, Eurasian and Pacific. <h1>The American Golden Plover</h1> is smaller, slimmer and relatively longer-legged than Eurasian Golden Plover (<i>Pluvialis apricaria</i>) which also has white axillary (armpit) feathers. It is more similar to Pacific Golden Plover (<i>Pluvialis fulva</i>) with which it was once <b>considered</b> conspecific under the name \"Lesser Golden Plover\". The Pacific Golden Plover is slimmer than the American species, has a shorter primary projection, and longer legs, and is usually yellower on the back.</p><p>These birds forage for food on tundra, fields, beaches and tidal flats, usually by sight. They eat insects and crustaceans, also berries.</p>]]></string> 

    Und zeige es mit:

     Spanned sp = Html.fromHtml( getString(R.string.htmlsource)); tv.setText(sp); 

    Versuchen Sie, diese Ressource ohne und mit tv.setText (getText (R.string.htmlsource)) zu verwenden; Und du wirst den Unterschied sehen.

    Idee: Setzen Sie den HTML in JSON-formatierte Dateien und speichern Sie sie in / res / raw. (JSON ist weniger wählerisch)

    Speichern Sie die Datensätze wie folgt in einem Array-Objekt:

     [ { "Field1": "String data", "Field2": 12345, "Field3": "more Strings", "Field4": true }, { "Field1": "String data", "Field2": 12345, "Field3": "more Strings", "Field4": true }, { "Field1": "String data", "Field2": 12345, "Field3": "more Strings", "Field4": true } ] 

    Um die Daten in Ihrer App zu lesen:

     private ArrayList<Data> getData(String filename) { ArrayList<Data> dataArray = new ArrayList<Data>(); try { int id = getResources().getIdentifier(filename, "raw", getPackageName()); InputStream input = getResources().openRawResource(id); int size = input.available(); byte[] buffer = new byte[size]; input.read(buffer); String text = new String(buffer); Gson gson = new Gson(); Type dataType = new TypeToken<List<Map<String, Object>>>() {}.getType(); List<Map<String, Object>> natural = gson.fromJson(text, dataType); // now cycle through each object and gather the data from each field for(Map<String, Object> json : natural) { final Data ad = new Data(json.get("Field1"), json.get("Field2"), json.get("Field3"), json.get("Field4")); dataArray.add(ad); } } catch (Exception e) { e.printStackTrace(); } return dataArray; } 

    Schließlich ist die Data nur ein Container von öffentlichen Variablen für einfachen Zugriff …

     public class Data { public String string; public Integer number; public String somestring; public Integer site; public boolean logical; public Data(String string, Integer number, String somestring, boolean logical) { this.string = string; this.number = number; this.somestring = somestring; this.logical = logical; } } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.