azerphoenix
@azerphoenix
Java Software Engineer

Как использовать форматированный текст с таблицами в TextView?

В БД SQlite планирую хранить форматированный текст в html формате.Дальше этот текст будет выводиться в TextView. Отсюда вопрос - какие html теги "понимает" textView и соответственно, как нужно выводить эти теги на странице. Насколько мне известно Html.fromHtml уже deprecated
https://stackoverflow.com/questions/37904739/html-...
Притом, что он не поддерживает теги таблицы table td tr tbody и др.
Есть ли альтернатива тому, в каком формате хранить данные в БД и как их выводить. В БД может быть текст с таблицей например.
String Resources также не поддерживает табличные теги - daniel-codes.blogspot.com/2011/04/html-in-textview...
Первоисточник: https://stackoverflow.com/questions/9754076/which-...

P.S. вариант использование Webview вместо Textview вряд ли подойдет для recyclerView...
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
azerphoenix
@azerphoenix Автор вопроса
Java Software Engineer
Хотелось бы услышать другие мнения по данному вопросу, но я решил этот вопрос следующим образом:
1) подключил библиотеку - https://github.com/PrivacyApps/html-textview
2) если в БД есть теги таблицы <table></table> , то вместо таблицы отображается ссылка при нажатии на которую открывается WebView. Соответственно, при помощи putExtra передаю таблицу и в WebView получаю ее.

Ниже представлен код, который я использовал:
1) build.gradle --> compile 'org.sufficientlysecure:html-textview:3.5'

2) Так как я формирую активити через recyclerview, то следующий код добавил в адаптер.
Добавляю внутренний класс:
class ClickableTableSpanImpl extends ClickableTableSpan {
        @Override
        public ClickableTableSpan newInstance() {
            return new ClickableTableSpanImpl();
        }

        @Override
        public void onClick(View widget) {
            Intent tableIntent = new Intent(mContext, WebViewActivity.class);
            tableIntent.putExtra("extra_table", getTableHtml());
            mContext.startActivity(tableIntent);
        }
    }


В методе onbindViewHolder:
descriptionViewHolder.htmlTextViewText.setClickableTableSpan(new ClickableTableSpanImpl());
DrawTableLinkSpan drawTableLinkSpan = new DrawTableLinkSpan();
drawTableLinkSpan.setTableLinkText("-- Просмотреть таблицу --");
descriptionViewHolder.htmlTextViewText.setDrawTableLinkSpan(drawTableLinkSpan);
descriptionViewHolder.htmlTextViewText.setHtml(descriptionList.get(position).getText());


В WebViewActivity onCreate():

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

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        // Получаем таблицу
        String webViewTable = getIntent().getStringExtra("extra_table");

        webView = (WebView) findViewById(R.id.webViewTable);
        webView.loadData(webViewTable,"text/html; charset=UTF-8", null);
    }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы