Lange Texte formatieren wie?

  • 10 Antworten
  • Letztes Antwortdatum
ronny130286

ronny130286

Fortgeschrittenes Mitglied
24
Hallo

ich möchte in meine App einen Changelog bzw. Hilfe Seite einbauen, nun finde ich aber keine Möglichkeit lange Texte schön zu formatieren, hatte es mit HTML schon versucht nur hierbei kommt man schnell an die Grenzen da nicht alles unterstützt wird (<li></li> <ul></ul> etc.)


Kann mir jemande ne Tipp geben wie ich sowas realisieren kann?

ein Beipiel:
HTML:
<p>Changelog:</p>
<ul>
  <li>veröffentlicht v1</li>
</ul>
<p>Funktionen:</p>
<ul>
  <li>blaallbalblalbalbla:
    <ul>
      <li>lalalalallalala</li>
      <li>lalalalalallalal</li>
    </ul>
  </li>
</ul>
 
ronny130286 schrieb:
Hallo

ich möchte in meine App einen Changelog bzw. Hilfe Seite einbauen, nun finde ich aber keine Möglichkeit lange Texte schön zu formatieren, hatte es mit HTML schon versucht nur hierbei kommt man schnell an die Grenzen da nicht alles unterstützt wird (<li></li> <ul></ul> etc.)


Kann mir jemande ne Tipp geben wie ich sowas realisieren kann?

ein Beipiel:
HTML:
<p>Changelog:</p>
<ul>
  <li>veröffentlicht v1</li>
</ul>
<p>Funktionen:</p>
<ul>
  <li>blaallbalblalbalbla:
    <ul>
      <li>lalalalallalala</li>
      <li>lalalalalallalal</li>
    </ul>
  </li>
</ul>


Sowas kannst Du relativ simpel realisieren.

Einfach z.B. bei einer TextView in der ".SetText()" Methode folgendes einbauen:

Code:
txt.setText(Html.fromHtml("<p>Changelog:</p>
<ul>
  <li>veröffentlicht v1</li>
</ul>
<p>Funktionen:</p>
<ul>
  <li>blaallbalblalbalbla:
    <ul>
      <li>lalalalallalala</li>
      <li>lalalalalallalal</li>
    </ul>
  </li>
</ul>"));

Wobei das "<p>" Element gar nicht benötigt wird. Kannst einfach nur als normalen Text mitgeben.
 
Max1809 schrieb:
Sowas kannst Du relativ simpel realisieren.

Einfach z.B. bei einer TextView in der ".SetText()" Methode folgendes einbauen:

Code:
txt.setText(Html.fromHtml("<p>Changelog:</p>
<ul>
  <li>veröffentlicht v1</li>
</ul>
<p>Funktionen:</p>
<ul>
  <li>blaallbalblalbalbla:
    <ul>
      <li>lalalalallalala</li>
      <li>lalalalalallalal</li>
    </ul>
  </li>
</ul>"));

Wobei das "<p>" Element gar nicht benötigt wird. Kannst einfach nur als normalen Text mitgeben.

ich habe es bis jetzt auch so versucht nur leider sehe ich nichts von der Formatierung, nur das ich den String in die strings.xml gespeichert hab
Code:
text.setText(Html.fromHtml(getString(R.string.hilfe)));
 
ronny130286 schrieb:
ich habe es bis jetzt auch so versucht nur leider sehe ich nichts von der Formatierung, nur das ich den String in die strings.xml gespeichert hab
Code:
text.setText(Html.fromHtml(getString(R.string.hilfe)));

Versuch das mal ohne die Strings.xml.
 
Das mit der HTML-Formatierung ist deprecated, besser ist das Benuten von Spannable um Texte mit verschiedenen Attributen (wie Textgröße, fett, ...) zu formatieren. Hier mal ein Code-Beispiel von mir (output ist ein TextView):

Code:
    public void onCreateIntro(Bundle sis) {
        String s;
        Spannable span;
        s=getResources().getString(R.string.introHead);
        output=(TextView)findViewById(R.id.output);
        span=new SpannableString(s);
        span.setSpan(new RelativeSizeSpan(1.5f),0,s.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new StyleSpan(Typeface.BOLD),0,s.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        output.append(span);
        // following works, but is deprecated, Spannable above is better:
        // output.append(Html.fromHtml("<h2>"+
        //        getResources().getString(R.string.introHead)+"</h2>"));
        output.append("\n\n"+
                getResources().getString(R.string.introLine1));
        output.append("\n\n");
        s=getResources().getString(R.string.introLine2);
        span=new SpannableString(s);
        span.setSpan(new RelativeSizeSpan(1.5f),0,9,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new StyleSpan(Typeface.BOLD),0,9,
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new RelativeSizeSpan(1.5f),14,s.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(new StyleSpan(Typeface.BOLD),14,s.length(),
                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        output.append(span);
        // following works, but is deprecated, Spannable above is better:
        // output.append(Html.fromHtml("<p><big><b>"+
        //    getResources().getString(R.string.introLine2_1)+
        //    " </b></big>"+getResources().getString(R.string.introLine2_2)+
        //    " <big><b>"+getResources().getString(R.string.introLine2_3)+
        //    "</b></big></p>"));
        output.append("\n\n"+
            getResources().getString(R.string.introLine4));
        // output.append("\n"+String.valueOf(state));
    }
 

Anhänge

  • screenshot-20130527-101156.png
    screenshot-20130527-101156.png
    13,5 KB · Aufrufe: 300
  • Danke
Reaktionen: Madlip
Danke erstmal für die Antworten. Ich habe es jetzt so gemacht

Code:
@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Automatisch generierter Methodenstub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_hilfe);
		
		text = (WebView)findViewById(R.id.webView1);
		
		text.loadData(readTextFromResource(R.raw.hilfe), "text/html", "utf-8");
		
	}

private String readTextFromResource(int resourceID)
	{
		InputStream raw = getResources().openRawResource(resourceID);
		ByteArrayOutputStream stream = new ByteArrayOutputStream();
		int i;
		try
		{
			i = raw.read();
			while (i != -1)
			{
				stream.write(i);
				i = raw.read();
			}
			raw.close();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		return stream.toString();
	}
 
Also ich mache das ganz gerne so, dass ich eine HTML Datei im assets-Verzeichnis ablege, und dann im zB. Hilfe-Dialog diese Datei via WebView anzeige ;)
Ist bei so relativ statischen Sachen einfach zu verwalten/ändern und sieht schick aus :thumbup:

Sieht dann zum Bleistift so aus: Screenshot

Greets,
Max

PS: Alternativ kannst du die HTML-Datei natürlich auch auf irgendeinem Server ablegen - ist dann noch einfacher zu verwalten und alle App-Versionen haben den gleichen Dialog ;)
(Wobei sich das nicht empfiehlt, wenn die App sonst keine Internet Verbindung braucht - dann sollte man auf die zusätzliche Permission verzichten)

"Komm wir essen Opa" - Satzzeichen retten Leben; Handys bewirken das Gegenteil... Vom Nexus gesendet ;)
 
Zuletzt bearbeitet:
myeta schrieb:
Also ich mache das ganz gerne so, dass ich eine HTML Datei im assets-Verzeichnis ablege, und dann im zB. Hilfe-Dialog diese Datei via WebView anzeige ;)
Ist bei so relativ statischen Sachen einfach zu verwalten/ändern und sieht schick aus :thumbup:

Sieht dann zum Bleistift so aus: Screenshot

Greets,
Max

PS: Alternativ kannst du die HTML-Datei natürlich auch auf irgendeinem Server ablegen - ist dann noch einfacher zu verwalten und alle App-Versionen haben den gleichen Dialog ;)
(Wobei sich das nicht empfiehlt, wenn die App sonst keine Internet Verbindung braucht - dann sollte man auf die zusätzliche Permission verzichten)

"Komm wir essen Opa" - Satzzeichen retten Leben; Handys bewirken das Gegenteil... Vom Nexus gesendet ;)

das mit dem Assets-Verzeichnis habe ich auch gelesen bzw. schon probiert => geht auch 1a, aber mit dem raw Ordner im res (res/raw => hier html Dateien rein) kann man doch das Ganze auch wieder mehrsprachig machen oder?

Die Html Dateien auf einem Server ablegen wollte ich eigentlich nicht machen => weil wie du schon schreibst braucht man dann eine Internetverbindung
 
ronny130286 schrieb:
das mit dem Assets-Verzeichnis habe ich auch gelesen bzw. schon probiert => geht auch 1a, aber mit dem raw Ordner im res (res/raw => hier html Dateien rein) kann man doch das Ganze auch wieder mehrsprachig machen oder?

Die Html Dateien auf einem Server ablegen wollte ich eigentlich nicht machen => weil wie du schon schreibst braucht man dann eine Internetverbindung
Muss ich gestehen, weiß ich nicht - die Apps, in denen ich das habe sind lediglich für deutsche Nutzer, sodass ich mich damit nicht beschäftigt habe ;)
Aber du kannst ja auch einfach zB. 2 Dateien anlegen und dann im Code je nach Sprache die Deutsche / Englische Version laden.
(Mehr als 2,3 Sprachen wirst du in einer kleinen App vermutlich eh nicht haben?!)

Korrekt - dann lass es lieber ;) aber wenn die Internet-Permission eh schon da wäre, ist es echt komfortabel. Gerade auch für Changelogs.

Greets
 
also ich hab's gerade mal getestet, mit meiner Variante mit dem raw und raw-de Ordner kann man das ganze noch 2 sprachig gestallten, da ich eigentlich min englisch und deutsch anbieten möchte

ich danke dir trotzdem :)
 
Zurück
Oben Unten