Si vous envisagez d'afficher du contenu long dans votre application, par exemple un article de blog, vous devez penser et planifier la façon dont ce contenu sera rendu. Même s'il est possible d'utiliser un textview, vous aurez du mal à le personnaliser pour tenir compte de caractéristiques comme les liens, les couleurs, les titres, etc. Le TextView n'est pas une très bonne solution. Cela nous laisse deux options : webview ou markdown.
Dans cet article, nous allons nous intéresser à markdown. Notez que la plupart des bibliothèques Markdown sont en fait construites à partir de WebView.
(a). tiagohm/MarkdownView
Bibliothèque Android permettant d'afficher du texte markdown.
Cette bibliothèque utilise [Flexmark] (https://github.com/vsch/flexmark-java) et certaines de ses extensions.
La bibliothèque peut :
- rendre le markdown à partir de
string
. - Rendre le texte markdown à partir de
assets
. - Rendre le texte en clair à partir d'une
URL
.
Dans le cas d'un URL
, elle utilise AsyncTask pour télécharger le contenu afin que votre application ne se fige pas. Dans tous ces cas, tout ce dont vous avez besoin est de passer la string
appropriée, que ce soit une URL
, un texte markdown ou un chemin de fichier.
Etape 1 : L'installer
Il est hébergé dans jitpack, donc vous aurez besoin d'ajouter jitpack comme une url maven dans sous la fermeture allProjects dans votre fichier build.gradle
de niveau racine :
maven { url 'https://jitpack.io' }
Puis ajouter la dépendance dans votre fichier build.gradle
au niveau de l'application :
implementation 'com.github.tiagohm.MarkdownView:library:0.19.0'
Puis synchronisez votre projet.
Étape 2 : Ajouter MarkdownView à la mise en page
L'étape suivante consiste à aller dans votre layout et à y ajouter le MarkdownView
:
<br.tiagohm.markdownview.MarkdownView
android:id="@+id/markdown_view"
app:escapeHtml="false"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Step 3 : Charger Markdown
Si vous utilisez Java, commencez par référencer le MarkdownView :
mMarkdownView = (MarkdownView)findViewById(R.id.markdown_view);
Si vous utilisez Kotlin, pas besoin de le faire puisque vous pouvez importer la vue en utilisant les synthétiques Kotlin ou encore mieux par ViewBinding.
Ensuite, dans les deux cas, nous procédons. Vous pouvez utiliser le CSS par défaut :
mMarkdownView.addStyleSheet(new Github());
ou charger un css externe situé dans le assets
:
mMarkdownView.addStyleSheet(ExternalStyleSheet.fromAsset("my_css.css", null))
Ensuite, on charge le markdown string
:
mMarkdownView.loadMarkdown("**MarkdownView**");
Ou charger le markdown de assets
:
mMarkdownView.loadMarkdownFromAsset("markdown1.md");
Ou encore charger le markdown en tant qu'objet fichier. Ce fichier par exemple peut être chargé depuis le système de fichiers :
mMarkdownView.loadMarkdownFromFile(new File());
Ou vous pouvez charger le markdown depuis en ligne :
mMarkdownView.loadMarkdownFromUrl("url");
C'est tout.
Étape 3 : fonctionnalités supplémentaires
Vous pouvez utiliser des css personnalisés. Soit construire le CSS de manière programmatique 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);
Soit charger le CSS à partir d'un fichier externe :
mMarkdownView.addStyleSheet(ExternalStyleSheet.fromAsset("github.css", null);
mMarkdownView.addStyleSheet(ExternalStyleSheet.fromAsset("github2.css", "screen and (min-width: 1281px)");
Vous pouvez également charger un fichier Javascript externe :
JavaScript js = new ExternalJavaScript(url, async, defer);
mMarkdownView.addJavascript(js);
Il s'agit d'une bibliothèque riche en fonctionnalités. Voici ses fonctionnalités :
- Gras
**Texte**
ou__Texte__
. - Italique
*Text*
ou_Text_
- Barré
~~Texte~~
. - Règles horizontales
--
- Titres
#
- Liens
[alt](url)
` - Images

- Code
- Citation en bloc
- Citations en bloc imbriquées
- Listes
- Tableaux
- TaskList
- Lien automatique
- Abréviation
- Marqueur
==Texte==
. - Sous-titre
H~2~O
- Superscript
10^-10^
- Frappe du clavier
@ctrl+alt+del@
` - MathJax Inline
$x = {-b \pm \sqrt{b^2-4ac} \over 2a}$
- MathJax
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}$'. \over 2a}$$
- Notes de bas de page
- Redimensionnement de l'image

- Mise en évidence de la syntaxe (avec Highlight.js)
- Emoji (EmojiOne v2)
:smile:
- CSS personnalisé
- Youtube
@[youtube](fM-J08X6l_Q)
` - JavaScripts
- Étiquette
--DEFAULT--
---SUCCESS---
----WARNING----
-----DANGER-----
- haricot
{{fieldName}}
- Attributs personnalisés
{ #id .class name=value name='value'}
` - Alignement du texte, taille du texte et couleurs du texte à l'aide d'attributs personnalisés
Exemple
Voici un exemple de MarkdownView utilisant cette bibliothèque :
activity_main.xml
Nous commençons par créer la mise en page :
<?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
Ensuite, nous écrivons notre code, soit en kotlin, soit en 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;
}
}
}
Ici se trouve la référence du code source.
Référence
Pour en savoir plus sur cette bibliothèque ici
(b). falnatsheh/MarkdownView
MarkdownView est un webview Android avec la capacité de charger un texte ou un fichier Markdown et de l'afficher en HTML, il utilise MarkdownJ et étend Android webview.
MarkdownView (Markdown For Android) est une bibliothèque Android qui vous aide à afficher du texte ou des fichiers Markdown (locaux/à distance) en tant que HTML formaté, et à styliser la sortie en utilisant CSS.
La MarkdownView elle-même étend Android Webview et ajoute la logique nécessaire pour analyser le texte Markdown (en utilisant MarkdownJ) et afficher la sortie HTML sur la vue.
Étape 1 : Installation
Installer MarkdownView à partir de jcenter :
implementation 'us.feras.mdv:markdownview:1.1.0'
Étape 2 : Ajouter à la mise en page
Ajoutez MarkdownView à votre mise en page XML :
<us.feras.mdv.MarkdownView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/markdownView" />
Étape 3 : Écrire le code
Si vous utilisez Java, référencez le MarkdownView de notre mise en page :
MarkdownView markdownView = (MarkdownView) findViewById(R.id.markdownView);
markdownView.loadMarkdown("## Hello Markdown");
Vous pouvez également utiliser view Binding ou data binding que vous utilisiez java ou kotlin. Si vous utilisez Kotlin, vous pouvez utiliser Kotlin Synthetics.
Vous pouvez également créer MarkdownView de manière programmatique :
MarkdownView markdownView = new MarkdownView(this);
setContentView(markdownView);
markdownView.loadMarkdown("## Hello Markdown");
Exemple
Voyons maintenant un exemple complet de l'utilisation de la bibliothèque MarkdownView pour charger le markdown localement :
**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");
}
}
**Comment appliquer des thèmes à MarkdownView ?
Disons que vous avez des thèmes et que vous voulez afficher le thème. L'utilisateur choisit un thème à partir d'un spinner
et nous appliquons ce thème à markdownview :
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
}
}
**Comment charger un fichier markdown à partir d'une chaîne
?
Si vous ahev votre markdown en mémoire comme une string
, cet exemple montre comment vous pouvez le charger :
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());
}
}
Comment rendre le markdown en ligne
Si vous ahev le fichier markdown hébergé à distance et que vous voulez le télécharger et le rendre, voici comment faire :
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");
}
}
Accédez à ces exemples ici
Démo
Voici la démo :
Référence
Trouvez la référence complète ici
(c). mukeshsolanki/MarkdownView-Android
MarkdownView est une bibliothèque simple qui vous aide à afficher du texte ou des fichiers Markdown sur Android comme une page html, tout comme Github.
Etape 1 : Installation
Ajouter jitpack dans votre fichier build.gradle
au niveau de la racine :
maven { url "https://jitpack.io" }
Puis installez la bibliothèque :
implementation 'com.github.mukeshsolanki:MarkdownView-Android:1.1.1'
Étape 2 : Ajout de la mise en page
Ensuite, vous devez ajouter MarkdowView à votre mise en page :
<com.mukesh.MarkdownView
android:id="@+id/markdown_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
Step 3 : Code
Ensuite, écrivez du code java ou kotlin :
Référencez le MarkdownView :
MarkdownView markdownView = (MarkdownView) findViewById(R.id.markdown_view);
Voici comment définir Markdowb à partir d'une string
:
markdownView.setMarkDownText("# Hello World\nThis is a simple markdown"); //Displays markdown text
...
Voici comment vous chargez le markdown à partir de assets
:
markdownView.loadMarkdownFromAssets("README.md"); //Loads the markdown file from the assets folder
...
Et voici comment vous chargez le markdown à partir du système de fichiers ou du chemin :
File markdownFile=new File("filePath");
markdownView.loadMarkdownFromFile(markdownFile); //Loads the markdown file.
Exemple
Voici un exemple complet :
**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
}
}
Trouvez le code source [ici] (https://github.com/mukeshsolanki/MarkdownView-Android/tree/master/app).
Référence
Trouvez la référence complète ici.