1.前言
我们在写sob_blog后端的文章时,使用的是MarkDown的语法。作为一名学习安卓的小菜鸡,自然希望在安卓上也能阅读我们写的文章。所以如果能在安卓上显示MarkDown,那可真是太爽了。考虑到前几天大锯老师在VUE里面引入了一个mavon-editor的库。所以在网上找了一个安卓端的RichText。这个不能编辑,但是可以达到阅读的目的。其实在安卓端写MarkDown文章应该挺烦的,所以只能看我觉得已经足够了。
2.引入
引入很简单,直接在gradle里面添加
compile 'com.zzhoujay.richtext:richtext:3.0.8'
MainActivity代码:
package com.guo.marketest;
import android.os.Bundle;
import android.widget.TextView;
import com.zzhoujay.markdown.method.LongPressLinkMovementMethod;
import com.zzhoujay.richtext.RichText;
import java.net.HttpURLConnection;
import androidx.appcompat.app.AppCompatActivity;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
/**
* @author lolxiaoguo.com
* @version $
* @des
*/
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//设置缓存
RichText.initCacheDir(this);
//找到控件
mTextView = findViewById(R.id.textView);
assert mTextView != null;
mTextView.setMovementMethod(LongPressLinkMovementMethod.getInstance());
//初始化View
intView();
}
private void intView() {
String ArticleUrl = "portal/article/740862874376732672";
Retrofit retrofit = RetrofitManager.getInstance().getRetrofit();
Api api = retrofit.create(Api.class);
//文章的Bean类,这里命名不规范,因为是测试
Call<Bean> task = api.getArticle(ArticleUrl);
task.enqueue(new Callback<Bean>() {
@Override
public void onResponse(Call<Bean> call, Response<Bean> response) {
int code = response.code();
LogUtils.d(MainActivity1.this, "result_code------>" + code);
if (code == HttpURLConnection.HTTP_OK) {
Bean body = response.body();
//设置数据
setText(body);
}
}
@Override
public void onFailure(Call<Bean> call, Throwable t) {
}
});
}
private void setText(Bean body) {
LogUtils.d(MainActivity1.this, "body------>" + body.getData().getContent());
//在这个版本里,这个设置方法挺简单的,直接一句话就可以了
RichText.fromMarkdown(body.getData().getContent()).into(mTextView);
}
}
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="2sp"
android:textSize="15sp"
android:textColor="?android:textColorPrimary"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"/>
</ScrollView>
此时就可以运行我们的程序了:
其实到这里,我们基本上已经达到了我们的目的。我们存储在云端的数据,已经按照MarkDown的语法展示出来了。
但是!但是!但是!
字是出来了,我图呢,我图呢。。。。
机智的我立马想到,肯定是因为我们在数据库存储的图片因为不包含域名导致的。于是就去找作者有没有提供什么set方法来修改图片链接。。。
但是找了好久没找到,坑爹(也有可能是作者提供了,我没找到...)
这咋整...
3.修改源码
此时机智的我又想起了大锯老师在领券联盟时修改源码的操作。那我直接把他相关源码的地方改了不就完事了。
第一步:
下载源码,复制到工程里
第二步:
在gradle里加入依赖
implementation project(':richtext')
在settings.gradle里加上
include ':app' ,':richtext'
第三步:
运行工程,此时你会发现,一大堆报错。基本上都是因为一些库的原因。只要按照提示进行修改即可。
第四步:
定位到设置imageUrl的地方,在url前面加上你的域名。
再次运行项目:
此时,图片已经怪怪的显示出来了,哈哈哈哈! 各位同志们,欢迎批评指正,有更好的做法请不吝赐教哈哈哈。
最后,在这里偷偷催更一波大锯老师更新博客门户。。。。。溜了溜了 另外,我好像发现,这次文章预览的样式挺好看的。不知道发布后是什么样式。