richtext-120502110238-phpapp02

21
Copyright © 2012CommonsWare, LLC Rich Text Editing... And Beyond

description

richtext

Transcript of richtext-120502110238-phpapp02

  • Copyright 2012CommonsWare, LLC

    Rich Text Editing... And

    Beyond

  • Copyright 2012CommonsWare, LLC

    Whadaya Mean, Rich?

    Things Like Bold, Italics, Underline, Etc. Other Terms

    Styled Text Formatted Text WYSIWYG

  • Copyright 2012CommonsWare, LLC

    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

    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

    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

    Getting More Concrete

    SpannedString String with markup

    SpannableString String with mutable markup

    SpannableStringBuilder String with mutable text and markup

  • Copyright 2012CommonsWare, LLC

    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

    Our Resources Are Low

    String Resources Can have inline markup (, , ) Retrieving the SpannedString

    getText() (as opposed to getString()) Applying the resource directly to a widget in a layout

    via @string/...

  • Copyright 2012CommonsWare, LLC

    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

    Tag! You're It?

  • Copyright 2012CommonsWare, LLC

    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

    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

    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

    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

    Hello? Didn't 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

    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

    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 what's in the selection now of this particular

    effect Invert current setting

  • Copyright 2012CommonsWare, LLC

    RichEditText: The Future!

    Better Support for Phones ...somehow...

    Full Range of CharacterStyle Support Colors (foreground/background) Line alignment Bullets Links

    Ragnark

  • Copyright 2012CommonsWare, LLC

    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

    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

    What Would Be Handy...

    More CharacterStyles? Theoretically an extensible system, based on

    interfaces More Reusable Editing Widgets

    EditStyledText?

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21