Rich TextEditing... And   Beyond    Copyright © 2012CommonsWare, LLC
Whadaya Mean, Rich?●   Things Like Bold, Italics, Underline, Etc.●   Other Terms    –   Styled Text    –   Formatted Text ...
Is Android Rich?●   Native Rich Text Rendering in TextView    –   Available to all subclasses of TextView (e.g.,        Bu...
Where Did All the Strings Go?●   CharSequence    –   In traditional Java, an inheritance artifact         ●   Mostly the s...
Spanning the Globe●   Spanned    –   Interface for CharSequences with inline        formatting●   Spannable    –   Sub-int...
Getting More Concrete●   SpannedString    –   String with markup●   SpannableString    –   String with mutable markup●   S...
We Are Stylin●   CharacterStyle    –   Base class for all styles that can be applied to a        portion of a Spanned    –...
Our Resources Are Low●   String Resources    –   Can have inline markup (<b>, <i>, <u>)    –   Retrieving the SpannedStrin...
Oh, Those Angle Brackets●   HTML    –   Use Html.fromHtml() to convert into        SpannedString         ●   Modest, undoc...
Tag! Youre It?●   <a href="...">                                                            ●   <h4>●   <b>               ...
Mark It Down●   Anything You Can Convert to HTML●   Example: Markdown    –   Popular wikitext format    –   Used by StackO...
Format This, Buddy●   Step #1: Get a SpannableString (or    subclass)●   Step #2: Manipulate the Formatting    –   setSpan...
The End of Style●   SPAN_EXCLUSIVE_EXCLUSIVE    –   Anything added at either end is considered        outside the span●   ...
CharSequence: Rich Yet Not●   Most Utility Methods On String, Not    CharSequence    –   Example: indexOf()●   TextUtils  ...
Hello? Didnt You Say “Editing”?●   EditText    –   Supports Editable         ●   Reason why you keep calling toString() to...
RichEditText●   Open Source Component●   Easy: Automatic FORMAT Action Mode    –   One method to enable    –   Works on An...
RichEditText: Innards●   Action Mode Items Set or Toggle “Effects”    –   Effect = Wrapper Around CharacterStyle         ●...
RichEditText: The Future!●   Better Support for Phones    –   ...somehow...●   Full Range of CharacterStyle Support    –  ...
A Little Bit Persistent●   SpannableString Not Serializable●   Best Native Bet: Convert into HTML    –   Need to test that...
What Would Be Handy...●   More In, More Out    –   Better HTML Conversion    –   More wikitext support         ●   Other f...
What Would Be Handy...●   More CharacterStyles?    –   Theoretically an extensible system, based on        interfaces●   M...
Upcoming SlideShare
Loading in …5
×

Rich Text Editing and Beyond

2,938 views

Published on

From the AnDevCon III conference

Published in: Technology, Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,938
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
37
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Rich Text Editing and Beyond

  1. 1. Rich TextEditing... And Beyond Copyright © 2012CommonsWare, LLC
  2. 2. Whadaya Mean, Rich?● Things Like Bold, Italics, Underline, Etc.● Other Terms – Styled Text – Formatted Text – WYSIWYG Copyright © 2012CommonsWare, LLC
  3. 3. Is Android Rich?● Native Rich Text Rendering in TextView – Available to all subclasses of TextView (e.g., Button) – Reasonable (but not immense) range of available styles to apply ● Differing fonts, colors ● Vertical & horizontal alignments ● Bullets ● Etc. Copyright © 2012CommonsWare, LLC
  4. 4. Where Did All the Strings Go?● CharSequence – In traditional Java, an inheritance artifact ● Mostly the superclass of StringBuilder – In Android, used as basis for rich text ● Hence, lots of CharSequence parameters and return values, in places where Android supports rich text Copyright © 2012CommonsWare, LLC
  5. 5. Spanning the Globe● Spanned – Interface for CharSequences with inline formatting● Spannable – Sub-interface where the spans can be modified● Editable – Sub-sub-interface where the text can be modified Copyright © 2012CommonsWare, LLC
  6. 6. Getting More Concrete● SpannedString – String with markup● SpannableString – String with mutable markup● SpannableStringBuilder – String with mutable text and markup Copyright © 2012CommonsWare, LLC
  7. 7. We Are Stylin● CharacterStyle – Base class for all styles that can be applied to a portion of a Spanned – 21 total subclasses, each applying some effect ● BackgroundColorSpan ● StyleSpan ● TypefaceSpan ● StrikethroughSpan Copyright © 2012CommonsWare, LLC
  8. 8. Our Resources Are Low● String Resources – Can have inline markup (<b>, <i>, <u>) – Retrieving the SpannedString ● getText() (as opposed to getString()) ● Applying the resource directly to a widget in a layout via @string/... Copyright © 2012CommonsWare, LLC
  9. 9. Oh, Those Angle Brackets● HTML – Use Html.fromHtml() to convert into SpannedString ● Modest, undocumented set of tags supported ● Optional, largely undocumented TagHandler for trying to add support for other tags – Put the resulting SpannedString in a TextView (or subclass) Copyright © 2012CommonsWare, LLC
  10. 10. Tag! Youre It?● <a href="..."> ● <h4>● <b> ● <h5>● <big> ● <h6>● <blockquote> ● <i>● <br> ● <img src="...">● <cite> ● <p>● <dfn> ● <small>● <div align="..."> ● <strike>● <em> ● <strong>● <font size="..." color="..." face="..."> ● <sub>● <h1> ● <sup>● <h2> ● <tt>● <h3> Copyright © 2012CommonsWare, LLC ● <u>
  11. 11. Mark It Down● Anything You Can Convert to HTML● Example: Markdown – Popular wikitext format – Used by StackOverflow, GitHub, etc. – Various parsers available – Example: AndDown ● Wrapper around sundown C parser Copyright © 2012CommonsWare, LLC
  12. 12. Format This, Buddy● Step #1: Get a SpannableString (or subclass)● Step #2: Manipulate the Formatting – setSpan() applies formatting to a particular region – removeSpan() removes a particular span – getSpans() retrieves applied spans for a given region Copyright © 2012CommonsWare, LLC
  13. 13. The End of Style● SPAN_EXCLUSIVE_EXCLUSIVE – Anything added at either end is considered outside the span● SPAN_INCLUSIVE_INCLUSIVE – Anything added at either end is considered inside the span● SPAN_EXCLUSIVE_INCLUSIVE● SPAN_INCLUSIVE_EXCLUSIVE Copyright © 2012CommonsWare, LLC
  14. 14. CharSequence: Rich Yet Not● Most Utility Methods On String, Not CharSequence – Example: indexOf()● TextUtils – Offers a subset of those utility methods as static methods that can be applied to a CharSequence Copyright © 2012CommonsWare, LLC
  15. 15. Hello? Didnt You Say “Editing”?● EditText – Supports Editable ● Reason why you keep calling toString() to get the plain text back – Users Edit Prose in Existing Spans ● You supply something with spans, and user types in the middle of one, gets formatted – No UI for Users to Set Own Spans Copyright © 2012CommonsWare, LLC
  16. 16. RichEditText● Open Source Component● Easy: Automatic FORMAT Action Mode – One method to enable – Works on Android 2.1+ (ActionBarSherlock!) – Works great on tablets (and not so hot on phones...)● Harder: Roll Your Own UI – E.g., toolbar Copyright © 2012CommonsWare, LLC
  17. 17. RichEditText: Innards● Action Mode Items Set or Toggle “Effects” – Effect = Wrapper Around CharacterStyle ● Awareness of current selection ● Manages idiosyncrasies of different style classes – Toggle Logic ● See whats in the selection now of this particular effect ● Invert current setting Copyright © 2012CommonsWare, LLC
  18. 18. RichEditText: The Future!● Better Support for Phones – ...somehow...● Full Range of CharacterStyle Support – Colors (foreground/background) – Line alignment – Bullets – Links● Ragnarök Copyright © 2012CommonsWare, LLC
  19. 19. A Little Bit Persistent● SpannableString Not Serializable● Best Native Bet: Convert into HTML – Need to test that the formatting you apply will survive the round-trip conversion● Alternative: DIY – More complete HTML conversion – Convert into something else (byte array? Markdown?) Copyright © 2012CommonsWare, LLC
  20. 20. What Would Be Handy...● More In, More Out – Better HTML Conversion – More wikitext support ● Other flavors ● Bi-directional – Word processing formats (ODT, DOC/DOCX) – Legacy formats ● RTF Copyright © 2012CommonsWare, LLC
  21. 21. What Would Be Handy...● More CharacterStyles? – Theoretically an extensible system, based on interfaces● More Reusable Editing Widgets – EditStyledText? Copyright © 2012CommonsWare, LLC

×