اندروید و HTML
۲۷ اسفند ۹۶ ، ۱۱:۱۰
سجاد یوسف نیا ۰ نظر Share

اندروید و HTML

تا حالا چند بار شده که بخواید از ( ... ) Html.fromHtml برای نمایش مارک آپ بر روی اندروید استفاده کنید؟ اگه یه نگاهی به سورس کد کلاس Html بندازید، متوجه میشید که تگ ها به spans تجزیه می شن و بعدش وارد TextView می شن. تگ های HTML پشتیبانی شده به صورت زیر هستن :

<!-- HTML tags supported by TextView in Android  -->
<a href="...">          <!-- hyperlink -->
<b>                     <!-- bold -->
<big>                   <!-- bigger -->
<blockquote>            <!-- block of quote -->
<br>                    <!-- break -->
<cite>                  <!-- title of work -->
<dfn>                   <!-- defining instance -->
<div align="...">       <!-- division in doc -->
<em>                    <!-- emphasized text -->
<h1>                    <!-- heading 1 -->
<h2>                    <!-- heading 2 -->
<h3>                    <!-- heading 3 -->
<h4>                    <!-- heading 4 -->
<h5>                    <!-- heading 5 -->
<h6>                    <!-- heading 6 -->
<i>                     <!-- italic -->
<img src="...">         <!-- image -->
<p>                     <!-- paragraph -->
<small>                 <!-- smaller -->
<strike>                <!-- strikethrough -->
<strong>                <!-- phrase text -->
<sub>                   <!-- subscript -->
<sup>                   <!-- superscript -->
<tt>                    <!-- teletype -->
<u>                     <!-- underline -->
<font size="..." color="..." face="...">        <!-- font style -->

همونطور که مشخصه تگ های کمی پشتیبانی میشه. پس بیایید یک قدم به جلو برداریم و از چیزی شبیه پایینی استفاده کنیم:

ممکنه که Spans بتونه همینکار رو انجام بده ولی استفاده ازش کمی سخت و پیچیدست. بنابراین، بیاید از Snippety که یک wrapper ای هست که بر اساس native ساخته شده و از spans سفارشی استفاده می کنه، استفاده می کنیم. در ضمن این Snippety همراه با یک کلاس helper به نام Truss استفاده میشه.
1-لیست مرتب شده
مستقیما از TextIndentSpan یا به جاش از (Snippety#number(leadWidth, gapWidth, number استفاده کنید.
int leadWidth = getResources().getDimensionPixelOffset(R.dimen.space_medium);
int gapWidth = getResources().getDimensionPixelOffset(R.dimen.space_xlarge);
textView.setText(new Truss()
        .appendln("Number One", new Snippety().number(leadWidth, gapWidth, 1))
        .appendln("Number Two", new Snippety().number(leadWidth, gapWidth, 2))
        .build());

2- لیست مرتب نشده

مستقیما از  TextIndentSpan استفاده کنید یا بجاش از (Snippety#bullet(leadWidth, gapWidth استفاده کنید.

int leadWidth = getResources().getDimensionPixelOffset(R.dimen.space_medium);
int gapWidth = getResources().getDimensionPixelOffset(R.dimen.space_xlarge);
textView.setText(new Truss()
        .appendln("Bullet One", new Snippety().bullet(leadWidth, gapWidth))
        .appendln("Bullet Two", new Snippety().bullet(leadWidth, gapWidth))
        .build());

3- لیست مرتب نشده ی سفارشی 

مستقیما از  TextIndentSpan استفاده کنید یا در عوض از ( Snippety#bullet(leadWidth, gapWidth, data استفاده کنید

int leadWidth = getResources().getDimensionPixelOffset(R.dimen.space_medium);
int gapWidth = getResources().getDimensionPixelOffset(R.dimen.space_xlarge);
textView.setText(new Truss()
        .appendln("Custom Bullet One", new Snippety().bullet(leadWidth, gapWidth, "I."))
        .appendln("Custom Bullet Two", new Snippety().bullet(leadWidth, gapWidth, "II."))
        .build());

4- لیست مرتب نشده با تصویر

مستقیما از IconMarginSpan یا در عوض از (Snippety#bullet(bitmap, padding استفاده کنید.

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_star_black_24dp);
int padding = getResources().getDimensionPixelOffset(R.dimen.space_medium);
textView.setText(new Truss()
        .appendln("Image Bullet One", new Snippety().bullet(bitmap, padding))
        .appendln("Image Bullet Two", new Snippety().bullet(bitmap, padding))
        .build());

5- از (Snippety#hr(lineWidth, lineColor استفاده کنید. 

int lineWidth = getResources().getDimensionPixelOffset(R.dimen.one_dp);
int lineColor = ContextCompat.getColor(getContext(), R.color.grey_light);
textView.setText(new Truss()
        .appendln(new Snippety().hr(lineWidth, lineColor))
        .build());

روش snippety باعث میشه شما بتونید هر htmlای رو که نیاز دارید به شکل زیبایی پیاده سازی کنید.

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی

تصاوير منتخب