Tables extension

ext-tables

This extension adds support for GFM tables.

final Markwon markwon = Markwon.builder(context)
        // create default instance of TablePlugin
        .usePlugin(TablePlugin.create(context))
        .build();
final TableTheme tableTheme = TableTheme.builder()
        .tableBorderColor(Color.RED)
        .tableBorderWidth(0)
        .tableCellPadding(0)
        .tableHeaderRowBackgroundColor(Color.BLACK)
        .tableEvenRowBackgroundColor(Color.GREEN)
        .tableOddRowBackgroundColor(Color.YELLOW)
        .build();

final Markwon markwon = Markwon.builder(context)
        .usePlugin(TablePlugin.create(tableTheme))
        .build();
final Markwon markwon = Markwon.builder(context)
        .usePlugin(TablePlugin.create(builder ->
                builder
                        .tableBorderColor(Color.RED)
                        .tableBorderWidth(0)
                        .tableCellPadding(0)
                        .tableHeaderRowBackgroundColor(Color.BLACK)
                        .tableEvenRowBackgroundColor(Color.GREEN)
                        .tableOddRowBackgroundColor(Color.YELLOW)
        .build();
))

Please note, that by default tables have limitations. For example, table contents won't be copied to clipboard if a TextView has such functionality. Table will always take full width of a TextView in which it is displayed. All columns will always be of the same width. So, default implementation provides basic functionality which can answer some needs. These all come from the limited nature of the TextView to display such content.

WARNING

If table contains links a special MovementMethod must be used on a TextView widget - TableAwareMovementMethod, for example with MovementMethodPlugin:

final Markwon markwon = Markwon.builder(context)
  .usePlugin(LinkifyPlugin.create())
  .usePlugin(TablePlugin.create(context))
  // use TableAwareLinkMovementMethod to handle clicks inside tables,
  // wraps LinkMovementMethod internally
  .usePlugin(MovementMethodPlugin.create(TableAwareMovementMethod.create()))
  .build();

In order to provide full-fledged experience, tables must be displayed in a special widget. Since version 3.0.0 Markwon provides a special artifact markwon-recycler that allows to render markdown in a set of widgets in a RecyclerView. It also gives ability to change display widget form TextView to any other.

final Table table = Table.parse(Markwon, TableBlock);
myTableWidget.setTable(table);

TIP

To take advantage of this functionality and render tables without limitations (including horizontally scrollable layout when its contents exceed screen width), refer to recycler-table module documentation that adds support for rendering TableBlock markdown node inside Android-native TableLayout widget.

Theme

Cell padding

Padding inside a table cell

nametableCellPadding
type@Px int
default0

Border color

The color of table borders

nametableBorderColor
type@ColorInt int
default(text color) with 75 (0-255) alpha

Border width

The width of table borders

nametableBorderWidth
type@Px int
defaultStroke with of context TextPaint

Odd row background

Background of an odd table row

nametableOddRowBackgroundColor
type@ColorInt int
default(text color) with 22 (0-255) alpha

Even row background 1.1.1

Background of an even table row

nametableEventRowBackgroundColor
type@ColorInt int
default0

Header row background 1.1.1

Background of header table row

nametableHeaderRowBackgroundColor
type@ColorInt int
default0
Last Updated: 8/31/2020, 11:03:51 PM