Se você está pensando ou exibindo conteúdo longo em seu aplicativo, por exemplo, um post no blog, então você precisa pensar e planejar como esse conteúdo será apresentado. Mesmo que seja possível usar uma visualização de texto, você terá dificuldade para personalizar a conta para recursos como links, cores, cabeçalhos, etc. O TextView não é um bom caminho a seguir. Isso nos deixa com duas opções: webview ou markdown.

Neste post, vamos olhar para o markdown. Note que a maioria das bibliotecas de Markdown são realmente construídas a partir do WebView.

(a). tiagohm/MarkdownView

Biblioteca Android para exibir texto de marcação para baixo.

Esta biblioteca usa Flexmark e algumas de suas extensões.

A biblioteca pode:

  • renderizar a marcação para baixo a partir de ‘string’.
  • Renderizar markdown a partir de assets.
  • Renderizar markdown a partir de um URL.

Em casos de URL ela utiliza AsyncTask para baixar a marcação para que seu aplicativo não congele. Em todos esses casos, tudo o que você precisa é passar o "string" apropriado, seja ele um "URL", um texto de remarcação para baixo ou um caminho de arquivo.

Etapa 1: Instale o aplicativo

Ele está hospedado no jitpack, então você precisará adicionar o jitpack como um maven url sob o fechamento de todos os projetos em seu arquivo build.gradle de nível de raiz:

maven { url 'https://jitpack.io' }

Em seguida, adicione a dependência em seu arquivo build.gradle de nível de aplicação:

implementation 'com.github.tiagohm.MarkdownView:library:0.19.0'

Em seguida, sincronize seu projeto.

Passo 2: Adicionar MarkdownView ao Layout

O próximo passo é ir para o seu layout e adicionar o MarkdownView lá:

<br.tiagohm.markdownview.MarkdownView
    android:id="@+id/markdown_view"
    app:escapeHtml="false"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Etapa 3: Markdown de carga

Se você estiver usando Java, comece referenciando o MarkdownView:

mMarkdownView = (MarkdownView)findViewById(R.id.markdown_view);

Se você estiver usando Kotlin, não há necessidade de fazer isso, uma vez que você pode importar a vista usando Kotlin synthetics ou ainda melhor através de ViewBinding.

Então, em ambos os casos, procedemos. Você pode usar o CSS padrão:

mMarkdownView.addStyleSheet(new Github());

ou carregar um css externo localizado nos assets:

mMarkdownView.addStyleSheet(ExternalStyleSheet.fromAsset("my_css.css", null))

Em seguida, carregue a marcação "string" para baixo:

mMarkdownView.loadMarkdown("**MarkdownView**");

Ou carregar a marcação para baixo a partir de assets:

mMarkdownView.loadMarkdownFromAsset("markdown1.md");

Ou carregar o markdown como um objeto de arquivo. Este arquivo, por exemplo, pode ser carregado a partir do sistema de arquivo:

mMarkdownView.loadMarkdownFromFile(new File());

Ou você pode carregar o markdown a partir da Internet:

mMarkdownView.loadMarkdownFromUrl("url");

É isso aí.

Passo 3: Características adicionais

Você pode usar o css personalizado. Ou construir o CSS programmaticamente via Java/Kotlin:

//InternalStyleSheet css = new InternalStyleSheet();
InternalStyleSheet css = new Github();
css.addFontFace("MyFont", "condensed", "italic", "bold", "url('myfont.ttf')");
css.addMedia("screen and (min-width: 1281px)");
css.addRule("h1", "color: orange");
css.endMedia();
css.addRule("h1", "color: green", "font-family: MyFont");
mMarkdownView.addStyleSheet(css);

Ou carregar o CSS a partir de um arquivo externo:

mMarkdownView.addStyleSheet(ExternalStyleSheet.fromAsset("github.css", null);
mMarkdownView.addStyleSheet(ExternalStyleSheet.fromAsset("github2.css", "screen and (min-width: 1281px)");

Você também pode carregar um arquivo Javascript externo:

JavaScript js = new ExternalJavaScript(url, async, defer);
mMarkdownView.addJavascript(js);

Esta é uma biblioteca rica em recursos. Aqui estão as suas características:

  • [x] Texto arrojado **** ou __Texto__`.
  • [x] Itálico *texto* ou _texto_
  • x] Strikethrough ~~~Text~~~
  • [x] Regras Horizontais ---
  • [x] Cabeçalhos #`
  • [x] Links [alt](url)
  • [x] Imagens ![alt](url)
  • [x] Código
  • x] Blockquote
  • x] Blockquote aninhado
  • [x] Listas
  • [x] Tabelas
  • [x] Lista de tarefas
  • [x] AutoLink
  • [x] Abreviação
  • [x] Mark ===Text===`
  • [x] Assinatura H~2~O
  • [x] Super-escrito 10^-10^
  • [x] Tecla @ctrl+alt+del@`
  • MathJax Inline `$x = {-b ^pm ^sqrt{b^2-4ac} \acima de 2a
  • MathJax $$x = {-b ^pm ^sqrt{b^2-4ac} \acima de 2a$$`
  • [x] Notas de rodapé
  • [x] Image Resizing ![alt](url@100px|auto)
  • [x] Destaque de sintaxe (usando Highlight.js)
  • [x] Emoji (EmojiOne v2) :smile:
  • [x] CSS personalizado
  • [x] Youtube @[youtube](fM-J08X6l_Q)
  • [x] Twitter
  • x] JavaScripts
  • [x] Rótulo --DEFAULT--' —SUCCESS–‘ ----WARNING----' —–DANGER—–‘.
  • [x] Bean {{{nome do campo}}`
  • [x] Atributos personalizados { #id .class name='value name='value'}`
  • [x] Alinhamento de Texto, Tamanho do Texto e Cores do Texto usando Atributos Personalizados

Exemplo

Aqui está um exemplo de MarkdownView usando esta biblioteca:

**activity_main.xml***

Começamos por criar o layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="br.tiagohm.markdownview.app.MainActivity">

    <br.tiagohm.markdownview.MarkdownView
        android:id="@+id/mark_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:escapeHtml="false" />
</LinearLayout>

**MainActivity.java***

Depois escrevemos nosso código, seja em kotlin ou java:

package br.tiagohm.markdownview.app;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;

import br.tiagohm.markdownview.MarkdownView;
import br.tiagohm.markdownview.css.InternalStyleSheet;
import br.tiagohm.markdownview.css.styles.Github;

public class MainActivity extends AppCompatActivity {

    private MarkdownView mMarkdownView;
    private InternalStyleSheet mStyle = new Github();

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.change_theme_action:
                break;
        }

        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Cria o bean.
        MyBean myBean = new MyBean();
        myBean.setHello("Olá");
        myBean.setDiasDaSemana(MyBean.DiasDaSemana.DOMINGO);

        mMarkdownView = findViewById(R.id.mark_view);
        mMarkdownView.addStyleSheet(mStyle);
        //http://stackoverflow.com/questions/6370690/media-queries-how-to-target-desktop-tablet-and-mobile
        mStyle.addMedia("screen and (min-width: 320px)");
        mStyle.addRule("h1", "color: green");
        mStyle.endMedia();
        mStyle.addMedia("screen and (min-width: 481px)");
        mStyle.addRule("h1", "color: red");
        mStyle.endMedia();
        mStyle.addMedia("screen and (min-width: 641px)");
        mStyle.addRule("h1", "color: blue");
        mStyle.endMedia();
        mStyle.addMedia("screen and (min-width: 961px)");
        mStyle.addRule("h1", "color: yellow");
        mStyle.endMedia();
        mStyle.addMedia("screen and (min-width: 1025px)");
        mStyle.addRule("h1", "color: gray");
        mStyle.endMedia();
        mStyle.addMedia("screen and (min-width: 1281px)");
        mStyle.addRule("h1", "color: orange");
        mStyle.endMedia();
        mMarkdownView.setBean(myBean);
        mMarkdownView.loadMarkdownFromAsset("markdown1.md");
    }

    public static class MyBean {

        public enum DiasDaSemana {
            DOMINGO,
            SEGUNDA,
            TERCA,
            QUARTA,
            QUINTA,
            SEXTA,
            SABADO
        }

        private String hello;
        private DiasDaSemana diasDaSemana;

        public String getHello() {
            return hello;
        }

        public void setHello(String hello) {
            this.hello = hello;
        }

        public DiasDaSemana getDiasDaSemana() {
            return diasDaSemana;
        }

        public void setDiasDaSemana(DiasDaSemana diasDaSemana) {
            this.diasDaSemana = diasDaSemana;
        }
    }
}

Aqui é a referência do código fonte.

Referência

Leia mais sobre esta biblioteca aqui

(b). falnatsheh/MarkdownView

MarkdownView é uma visualização web do Android com a capabilidade de carregar texto ou arquivo Markdown e exibi-lo como HTML, ele usa MarkdownJ e estende a visualização web do Android.

MarkdownView (Markdown Para Android) é uma biblioteca Android que ajuda a exibir o texto ou arquivos Markdown (local/remoto) como HTML formatado, e estilizar a saída usando CSS.

O próprio MarkdownView estende o Webview do Android e adiciona a lógica necessária para analisar Markdown (usando MarkdownJ) e exibir o HTML de saída na visualização.

Passo 1: Instalação

Instalar MarkdownView a partir do jcenter:

implementation 'us.feras.mdv:markdownview:1.1.0'

Passo 2: Adicionar ao Layout

Adicione o MarkdownView ao seu layout XML:

   <us.feras.mdv.MarkdownView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/markdownView" />

Passo 3: Escrever Código

Se você estiver usando Java, consulte o MarkdownView a partir de nosso layout:

MarkdownView markdownView = (MarkdownView) findViewById(R.id.markdownView);
markdownView.loadMarkdown("## Hello Markdown");

Você também pode usar o view Binding ou a encadernação de dados, quer você esteja usando java ou kotlin. Se você estiver usando Kotlin você pode usar Kotlin Synthetics.

Você também pode criar MarkdownView programmaticamente:

  MarkdownView markdownView = new MarkdownView(this);
  setContentView(markdownView);
  markdownView.loadMarkdown("## Hello Markdown");

Exemplo

Vejamos agora um exemplo completo de como usar a biblioteca MarkdownView para carregar o markdown localmente:

**MainActivity.java***

import us.feras.mdv.MarkdownView;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;

public class LocalMarkdownActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MarkdownView webView = new MarkdownView(this);
        setContentView(webView);
        webView.loadMarkdownFile("file:///android_asset/hello.md");
    }
}

**Como aplicar os temas ao MarkdownView***

Digamos que você tem temas e quer exibir o tema. O usuário escolhe um tema a partir de um "gira-discos" e nós aplicamos esse tema para a visualização de marcação:

import us.feras.mdv.MarkdownView;
import android.app.Activity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

public class MarkdownThemesActivity extends AppCompatActivity implements
        OnItemSelectedListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.markdown_themes);
        Spinner themesSpinner = (Spinner) findViewById(R.id.themes_spinner);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.md_themes, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        themesSpinner.setAdapter(adapter);
        themesSpinner.setSelection(0);
        themesSpinner.setOnItemSelectedListener(this);
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int pos,
            long id) {
        MarkdownView mdv = (MarkdownView) findViewById(R.id.markdownView);
        mdv.loadMarkdownFile("file:///android_asset/hello.md",
                "file:///android_asset/markdown_css_themes/"
                        + parent.getItemAtPosition(pos).toString() + ".css");
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // no-op
    }
}

**Como carregar a Markdown a partir de uma "corda "***

Se você tiver sua marca na memória como um "cordão", este exemplo mostra como você pode carregá-lo:

public class MarkdownDataActivity extends AppCompatActivity {

    private EditText markdownEditText;
    private MarkdownView markdownView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.markdown_view);
        markdownEditText = (EditText) findViewById(R.id.markdownText);
        markdownView = (MarkdownView) findViewById(R.id.markdownView);
        String text = getResources().getString(R.string.md_sample_data);
        markdownEditText.setText(text);
        updateMarkdownView();

        markdownEditText.addTextChangedListener(new TextWatcher() {

            @Override
            public void afterTextChanged(Editable s) {}

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                updateMarkdownView();
            }
        });

    }

    private void updateMarkdownView() {
        markdownView.loadMarkdown(markdownEditText.getText().toString());
    }
}

**Como Render Markdowb de online***

Se você tiver o arquivo markdown hospedado remotamente e quiser baixá-lo e renderizá-lo, aqui está como você faz isso:

public class RemoteMarkdownActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MarkdownView markdownView = new MarkdownView(this);
        setContentView(markdownView);
        markdownView.loadMarkdownFile("https://raw.github.com/falnatsheh/MarkdownView/master/README.md");
    }
}

Acesse estes exemplos aqui

Demo

Aqui está uma demonstração:

Referência

Encontrar referência completa aqui

(c). mukeshsolanki/MarkdownView-Android

MarkdownView é uma biblioteca simples que ajuda a exibir textos ou arquivos Markdown no Android como uma página html, assim como o Github.

Passo 1: Instalação

Adicione o jitpack em seu arquivo ‘build.gradle’ de nível de raiz:

maven { url "https://jitpack.io" }

Em seguida, instale a biblioteca:

implementation 'com.github.mukeshsolanki:MarkdownView-Android:1.1.1'

Passo 2: Adicionar layout

A seguir você precisa adicionar o MarkdowView ao seu layout:

<com.mukesh.MarkdownView
    android:id="@+id/markdown_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
/>

Passo 3: Código

Em seguida, escreva o código java ou kotlin:

Faça referência ao MarkdownView:

MarkdownView markdownView = (MarkdownView) findViewById(R.id.markdown_view);

Eis como você define Markdowb a partir de um "cordão":

markdownView.setMarkDownText("# Hello World\nThis is a simple markdown"); //Displays markdown text
...

Veja como você carrega o markdown dos ‘assets’:

markdownView.loadMarkdownFromAssets("README.md"); //Loads the markdown file from the assets folder
...

E aqui está como você carrega a marcação a partir do sistema ou caminho de arquivo:

File markdownFile=new File("filePath");
markdownView.loadMarkdownFromFile(markdownFile); //Loads the markdown file.

Exemplo

Aqui está um exemplo completo:

**MainActivity.java***

package com.mukesh.markdownview.example;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.mukesh.MarkdownView;

public class MainActivity extends AppCompatActivity {

  @Override protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    MarkdownView markdownView = (MarkdownView) findViewById(R.id.markdown_view);
    markdownView.setMarkDownText("# Hello World\nThis is a simple markdown\n"
        + "https://github.com/mukeshsolanki/MarkdownView-Android/");
    //markdownView.loadMarkdownFromAssets("README.md");
    markdownView.setOpenUrlInBrowser(true); // default false

  }
}

Encontre o código fonte aqui.

Referência

Encontre referência completa aqui.