2014-05-02 11 views
9

Sto sviluppando un progetto Android e voglio rendere qualche formula chimica.formula chimica su Android

Ho scritto il seguente codice e ho ottenuto il seguente risultato.

Creo una stringa personalizzata e la mostro in una visualizzazione testuale.

Ma la mia domanda è questa: è questo il modo migliore per farlo? E c'è un altro modo per gestirlo?

str = new SpannableString(Html.fromHtml("2H<sup>+</sup> + So<sub size = 2>4</sub><sup size = 2>2-</sup> --> H<sub size =2>2</sub>So<sub size = 2>4</sub>")); 
ss1.setSpan(new RelativeSizeSpan(0.6f), 2,3, 0); // set size 
ss1.setSpan(new RelativeSizeSpan(0.6f), 8,11, 0); // set size 
ss1.setSpan(new RelativeSizeSpan(0.6f), 17,18, 0); // set size 
ss1.setSpan(new RelativeSizeSpan(0.6f), 20,21, 0); // set size 
TempF.setText(ss1,TextView.BufferType.SPANNABLE); 

Example Chemical Formula

+1

Hai trovato una buona soluzione, che è abbastanza facile da implementare per molte formule chimiche. Su Android, potresti aver usato caratteri speciali personalizzati su Canvas, LaTeX, grafica vettoriale (attraverso una libreria) e molti altri modi per ottenere lo stesso risultato, ma la soluzione mi piace di più (supponendo che tu non abbia altro requisiti speciali che non ho preso in considerazione). –

+0

Grazie! Ottima risposta :) SpannableString spannableString = new SpannableString ( Html.fromHtml ("C H 14 N ")); spannableString.setSpan (new RelativeSizeSpan (0.6f), 1, 3, 0); spannableString.setSpan (new RelativeSizeSpan (0.6f), 4, 6, 0); spannableString.setSpan (nuovo RelativeSizeSpan (0.6f), 7, 8, 0); –

risposta

4

Non credo ci sia un modo migliore.

Sfortunatamente Html.fromHtml() ignora i tag <font size="n">, quindi questi intervalli devono essere aggiunti manualmente, come si è fatto.

0

Penso che tu abbia trovato una soluzione adatta a te. Forse, se c'è una regola da sapere quando un simbolo sarà un pedice o apice, o lo spansize che devi usare, puoi scrivere un metodo per analizzare una data formula formata come una stringa e fornire automaticamente l'output html formattato .

Per fare ciò e presupponendo che esistano regole specifiche, è possibile utilizzare una macchina a stati finiti che "compila" una stringa di testo sull'output html necessario.

Se stai cercando qualcosa di simile fammelo sapere e potremmo riuscire a risolverlo.

Un'altra opzione sarebbe quella di vedere se si trova (in Internet) un tipo di carattere che soddisfi le proprie esigenze (O forse costruisci il proprio). Puoi importare un font inserendo il file font nella cartella assets e impostandolo da lì nella sorgente.

0

Ho avuto un problema simile da risolvere. Ho creato una semplice libreria estendendo WebView e utilizzando JavaScript in background. https://github.com/RanaRanvijaySingh/EquationView

String strChem = "Chemistry: \\(\\ce{CO2 + C -> 2 CO}\\)"; 
EquationView equationViewChem = findViewById(R.id.equationViewChem); 
equationViewChem.setText(strChem); 

Nel file di layout:

<com.rana.equationview.EquationView 
android:id="@+id/equationViewChem" 
android:layout_width="match_parent" 
android:layout_height="wrap_content"/> 

enter image description here

Spero che questo aiuta qualcuno.