2014-05-02 11 views
9

Pracuję nad projektem android i chcę uczynić formułę chemii.Formuła chemii na Androida

Napisałem poniższy kod i otrzymałem następujący wynik.

Tworzę niestandardowy ciąg i pokazuję go w widoku tekstowym.

Ale moje pytanie brzmi: czy to najlepszy sposób na zrobienie tego? Czy istnieje inny sposób, aby sobie z tym poradzić?

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

Znalazłeś dobre rozwiązanie, które jest łatwe do wdrożenia dla wielu formuł chemicznych. Na Androidzie mogłeś użyć specjalnych niestandardowych czcionek na płótnie, LaTeX, grafice wektorowej (przez bibliotekę) i wielu innych sposobach osiągnięcia tego samego wyniku, ale lubię twoje rozwiązanie najlepsze (zakładając, że nie masz żadnych innych specjalne wymagania, których nie brałem pod uwagę). –

+0

Dzięki! Wielki odpowiedź :) SpannableString spannableString = nowy 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 (new RelativeSizeSpan (0.6f), 7, 8, 0); –

Odpowiedz

4

Nie sądzę, istnieje lepszy sposób.

Niestety Html.fromHtml() ignoruje znaczniki <font size="n">, więc te zakresy należy dodać ręcznie, tak jak to się stało.

0

Myślę, że znalazłeś rozwiązanie, które pasuje do Ciebie. Być może, jeśli istnieje zasada, aby wiedzieć, kiedy symbol ma być indeksem dolnym lub indeksem górnym, lub spansize, którego należy użyć, można napisać metodę analizowania danej formuły jako ciągu znaków i automatycznie dostarczać sformatowane dane wyjściowe html .

Aby to zrobić, i zakładając, że istnieją określone reguły, można użyć skończonej maszyny stanów, która "skompiluje" ciąg tekstowy do potrzebnego html.

Jeśli szukasz czegoś takiego, daj mi znać, a być może uda nam się go rozwiązać.

Inną opcją byłoby sprawdzenie, czy znajdujesz (w Internecie) czcionkę, która spełnia Twoje potrzeby (lub może twoja własna). Możesz zaimportować czcionkę, umieszczając plik czcionki w folderze zasobów i ustawiając go w źródle.

0

Miałem podobny problem do rozwiązania. Stworzyłem prostą bibliotekę, rozszerzając WebView i używając JavaScript w tle. https://github.com/RanaRanvijaySingh/EquationView

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

W pliku układ:

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

enter image description here

Nadzieja to pomaga kogoś.