mathew-kurian / TextJustify-Android

:page_facing_up: Android Text Full Jusiftication / Wrapping / Justify / Hyphenate - V2.0
https://github.com/bluejamesbond/TextJustify-Android/wiki
Apache License 2.0
1.86k stars 370 forks source link

java.lang.IndexOutOfBoundsException #141

Open IstrajI opened 7 years ago

IstrajI commented 7 years ago

Hello. I have got IndexOutOfBoundsException whan I try to set Html-text to "formatted" DocumentView. I have something like static book application and strange is in that exception happens pereodically not for all pages of book. Sometimes it shows exception for second page, sometimes I have opportunity to go 5 or 6 pages before exception happens.

Exception:

java.lang.IndexOutOfBoundsException at android.graphics.Canvas.drawText(Canvas.java:1736) at com.bluejamesbond.text.Styled.drawUniformRun(Styled.java:126) at com.bluejamesbond.text.Styled.drawDirectionalRun(Styled.java:289) at com.bluejamesbond.text.Styled.drawText(Styled.java:353) at com.bluejamesbond.text.SpannableDocumentLayout.onDraw(SpannableDocumentLayout.java:514) at com.bluejamesbond.text.IDocumentLayout.draw(IDocumentLayout.java:143) at com.bluejamesbond.text.DocumentView.drawLayout(DocumentView.java:184) at com.bluejamesbond.text.DocumentView.onDraw(DocumentView.java:620) at android.view.View.draw(View.java:17469) at android.widget.ScrollView.draw(ScrollView.java:2627) at android.view.View.updateDisplayListIfDirty(View.java:16464) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.updateDisplayListIfDirty(View.java:16459) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.draw(View.java:17472) at android.widget.ScrollView.draw(ScrollView.java:2627) at android.view.View.updateDisplayListIfDirty(View.java:16464) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.updateDisplayListIfDirty(View.java:16459) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.updateDisplayListIfDirty(View.java:16459) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.updateDisplayListIfDirty(View.java:16459) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.updateDisplayListIfDirty(View.java:16459) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.updateDisplayListIfDirty(View.java:16459) at android.view.View.draw(View.java:17238) at android.view.ViewGroup.drawChild(ViewGroup.java:3921) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3711) at android.view.View.draw(View.java:17472) at com.android.internal.policy.PhoneWindow$DecorView.draw(PhoneWindow.java:3205) at android.view.View.updateDisplayListIfDirty(View.java:16464) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:325) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:331) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:366) at android.view.ViewRootImpl.draw(ViewRootImpl.java:3134) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2933) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2522) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7397) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:920) at android.view.Choreographer.doCallbacks(Choreographer.java:695) at android.view.Choreographer.doFrame(Choreographer.java:631) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:906) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7224) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller

DocumentView:

<com.bluejamesbond.text.DocumentView android:id="@+id/text_view_game_paragraph_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/spacing_16" ext:documentView_antialias="true" ext:documentView_cacheConfig="high_quality" ext:documentView_reverse="false" ext:documentView_textAlignment="justified" ext:documentView_textColor="@color/colorTextPrimary" ext:documentView_textFormat="formatted" ext:documentView_textSize="18sp" ext:documentView_textSubPixel="false"/>

Setting text:

paragraphTextTextView.setText(Html.fromHtml(getString(nextParagraph.getTextId())));

String-recources examples: (Its second page, first one always shows ok - with format and no exceptions) <string name="p501_t"><![CDATA[Пробуждение<br>Боль. Первое что вы испытываете открыв глаза это боль. В расширяющихся сосудах, словно электрическими зарядами распространяется она по онемевшим мышцам. На каждом глубоком вздохе трещат расправляясь отвыкшие от движений ребра. Но постепенно боль слабеет, хотя возможно вы просто к ней привыкаете. Пройдет еще много времени прежде чем тело войдёт в норму.<br>Капсула выдвигается из туннеля в стене, ведущего к аварийному челноку. Капсула. Корабль. "Крысобой". Воспоминания, как пазлы, выпадая случайным образом, кусками восстанавливают окружающую обстановку. Некоторых фрагментов не хватает.<br>На информационном экране в стенке капсулы появляются данные биометрии. Вы с удивлением понимаете, что можете их прочитать и даже осознать. В целом никаких проблем со здоровьем нет, просто последствия слишком долгого сна. Крышка съезжает в сторону, приглашая выбраться наружу. Морщитесь от мягкого света. Автоматика предусмотрительно не включает его сразу на полную мощность. На том же экране видите новое сообщение: "Исин Грэм активирован. Ожидание распоряжений".<br>- Склько… я спл? - с трудом ворочая языком хрипите сиплым голосом. Ваша гортань пропускает звуки словно предварительно обработав их напильником…]]></string>

If I try to use ext:documentView_textFormat="plain" - there is no exceptions but also I lose all formats, so mb there is solve for plain?

amoikevin commented 7 years ago

+1

Guneetgstar commented 5 years ago

I added two attributes android:singleLine="true" android:imeOptions="actionDone" and everything started working as normal. Well, I still do not understand the cause and may dig into it further but hope this will help for now.