چطور در TextView از HTML برای نمایش محتوا استفاده کنیم؟

توی این نوشته کوتاه قصد دارم با هم دیگه نگاهی به این موضوع بندازیم که چطور می تونیم یه محتوای HTML رو توی یک TextView در اندروید نشون بدیم.

توی اندروید کلاس خیلی کاربردی داریم به اسم android.text.HTML که با کمک یکی از متدهاش، String گرفته شده که در قالب یک سند HTML بوده رو پردازش می کنه و درنهایت یک متن قالب بندی شده تحویل میده.

ایده این کار خیلی جالبه مخصوصا وقتی می خواید متن تون استایل های متفاوتی داشته باشه. شما می تونید با کمک تگ های رایجی که هست متن تون رو خیلی زیاد قابل خوندن تر و زیبا تر کنید، حتی امکان استفاده از تصاویر هم وجود داره! خیلی باحاله که میشه توی یک TextView متن و عکس رو باهم نشون داد.

خب بحث از تگ های HTML رایج شد نه؟ داکیومنت های رسمی سایت توسعه دهندگان اندروید هیچ لیستی از تگ های HTML قابل پشتیبانی ارائه نکرده. ولی با نگاه سریعی که من به سورس کد اندروید انداختم تونستم یه لیست از تگ های HTML که تو اندروید پشتیبانی میشن رو پیدا کنم و می تونید اونها در زیر مشاهده کنید.

یه نکته که خودم می تونم اضافه کنم این هست که مقاله اصلی یه لینک به قسمتی از سورس کد اندروید داده ولی متاسفانه اون لینک کار نمی کنه.

<a href="...">
<b>,  <big>, <blockquote>, <br>, <cite>, <dfn>
<div align="...">,  <em>, <font size="..." color="..." face="...">
<h1>,  <h2>, <h3>, <h4>,  <h5>, <h6>
<i>,  <img src="...">,  <p>, <small>
<strike>,  <strong>, <sub>, <sup>, <tt>, <u>

در بالا اشاره ای به این موضع داشتیم که متدی از کلاس Html یک String می گیره و بعد اون رو در یک قالب فرمت بندی شده برمیگردونه.

نکته ای که هست اینه که این متد در حالت عادی می تونه فقط یک آرگومان String توش پاش بشه. ولی در یک حالت دیگه اگر عکس، به عنوان مثال، توی سند Html تون باشه لازمه که دوتا آرگومان دیگه رو هم پاس کنید. این آرگومان ها Html.TagHandler و Html.ImageGetter خواهند بود.

البته این امکان وجود داره که کلاس Html.TagHandler رو ایجاد نکرده و به جای null رو پاس بدیم ولی اگر سندتون عکس داره لازمه که Html.ImageGetter حتما پیاده سازی شده باشه.

در حالت کلی میشه گفت که یک حالت پیشفرض برای Html.TagHandler وجود داره ولی این حالت پیشفرض برای Html.ImageGetter وجود نداره و لازمه که پیاده سازی بشه.

در مورد لود عکس ها شما می تونید عکس های تون رو به صورت لوکال از خود برنامه لود کنید که در این مثال هم به علت سادگی این کار انجام شده ولی درصورتی که عکس قراره از اینترنت خونده بشه در این صورت به خاطر داشته باشید که عکس باید به صورت asynchronous لود بشه.

شاید توی مثال های بعدی یه نگاهی به این بخش هم انداختم.

package com.javatechig.example.ui;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.text.Html;
import android.view.Menu;
import android.widget.TextView;
 /*
*  @author: nilanchala
*  http://javatechig.com/
*/
public class MainActivity extends Activity {
private final String htmlText = "  Heading TextThis tutorial " +
            "explains how to display " +
            "HTML text in android text view. " +
            "" +
            "  Example from " +
            "Javatechig.com";
@Override
protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);
          TextView htmlTextView = (TextView)findViewById(R.id.html_text);
          htmlTextView.setText(Html.fromHtml(htmlText, new ImageGetter(), null));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
         // Inflate the menu; this adds items to the action bar if it is present.
         getMenuInflater().inflate(R.menu.main, menu);
         return true;
}
private class ImageGetter implements Html.ImageGetter {
public Drawable getDrawable(String source) {
        int id;
        if (source.equals("hughjackman.jpg")) {
               id = R.drawable.hughjackman;
        }
        else {
            return null;
        }
       Drawable d = getResources().getDrawable(id);
       d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
       return d;
     }
};
}

این نوشته در حقیقت نسخه ترجمه شده از یک نوشته دیگه توی اینترنت بود و می تونید نسخه اصلی اون رو با عنوان How to Display HTML in Android TextView از این لینک پیدا کنید.

البته نمی شه گفت این مقاله ترجمه بوده ولی خب ایده نوشتن این مقاله و قسمتی از کدهایی که می بینید از منبعی که در بالا بهش اشاره شد، برداشت شده.

منتشر شده توسط آکام محبی

من یک گیک و دانشجوی مهندسی نرم افزار در دانشگاه فنی تبریز هستم، کسی که وبلاگ می نویسه و عاشق هک کردن، لینوکس، پایتون و چند مورد دیگست.

دیدگاه خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

20 + 20 =