آموزش برنامه نویسی اندروید (Android)
۴۱۹ آموزش
نمایش دسته بندی ها (۴۱۹ آموزش)

نمایش حاصل اجرای کدهای HTML ، در یک TextView ، در برنامه نویسی اندروید

در مبحثی دیگر گفتیم که نتیجه اجرای کدهای HTML را می توانیم در یک WebView نمایش بدهیم، اما علاوه بر WebView ، در TextView نیز می توان حاصل اجرای کدهای HTML را نمایش داد (البته با روشی که در ادامه شرح می دهیم). مثلا تگ های h1 تا h6 باعث بزرگتر نمایش داده شدن در TextView می شوند. البته باید در همین ابتدا تذکر داده شود که برای برخی از تگ های (tags) مربوط به HTML ، باید یک سری کد بنویسیم تا درست عمل کنند. مثلا برای تگ a که برای نمایش یک لینک (link) است، لینک نمایش داده می شود اما با اشاره بر روی آن، به صفحه مقصد منتقل نمی شویم و برای تصحیح این مشکل، باید کمی کد بنویسیم. بنابراین اگر برای نمایش نتیجه اجرای کدهای HTML ، زیاد برایتان تفاوتی بین WebView و TextView نیست، توصیه می شود از همان WebView استفاده کنید، اما اگر از برخی ویژگی های TextView می خواهید استفاده کنید، در ادامه چگونگی اجرای کدهای HTML در یک TextView را شرح خواهیم داد.

فرض کنید که یک TextView با id برابر textView1 داریم. متن مورد نظرمان را که حاوی تگ های HTML نیز می باشد، در متغیری با نام myText ذخیره می کنیم و برای نمایش آن در TextView ، کدهای زیر را می نویسیم :


String myText = "www.kelidestan.com <h2>www.kelidestan.com</h2> www.kelidestan.com";
Spanned sp = Html.fromHtml(myText);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(sp);

بنابراین چون در بخشی از متن، از تگ h2 استفاده کرده ایم، آن بخش از متن، بزرگتر نمایش داده می شود.

مهمترین بخش از کدها، استفاده از روش Html.fromHtml می باشد.

نکته

همان طور که قبلا گفتیم، روش فوق، برای برخی تگ های HTML ، ممکن است درست عمل نکند. مثلا فرض کنید که در متن مورد نظرمان، یک لینک تعریف کرده باشیم (با تگ a) :


String myText = "<a href=\"http://www.kelidestan.com/\">www.kelidestan.com</a>";
Spanned sp = Html.fromHtml(myText);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(sp);

دقت کنید که قبل از علامت های " در متن، باید علامت \ را بنویسیم تا با خطا روبرو نشویم. اگر کد بالا اجرا شود، لینک نمایش داده می شود، اما با کلیک بر روی آن، به صفحه مقصد منتقل نمی شویم. برای آنکه لینک به درستی عمل کند، باید یک خط کد به کدهایمان اضافه کنیم :


tv.setMovementMethod(LinkMovementMethod.getInstance());

بنابراین کل کدهایمان به صورت زیر می باشد :


String myText = "<a href=\"http://www.kelidestan.com/\">www.kelidestan.com</a>";
Spanned sp = Html.fromHtml(myText);
TextView tv = (TextView) findViewById(R.id.textView1);
tv.setText(sp);
tv.setMovementMethod(LinkMovementMethod.getInstance());

با این کدها، هنگام اشاره کاربر بر روی لینک، مرورگر اینترنت گوشی اندروید وی باز شده و آن صفحه مقصد را نمایش می دهد.

نویسنده علیرضا گلمکانی
شماره کلید 827
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 5 5 0
یاسر
۱۳۹۵/۰۷/۱۱
۱۷:۵۰

در بیسیک فور اندروید چجوری میشه اینکارو انجام  داد؟

یاسر
۱۳۹۵/۰۷/۱۱
۱۸:۳۶

خواهشا جواب بدید

یاسر
۱۳۹۵/۰۷/۱۲
۱۳:۱۵

میشه لطفا یه نفر پاسخ بده
واسه بیسیک 4 اندروید اینکار رو چجوری میشه کرد؟

admin
۱۳۹۵/۰۷/۱۲
۱۴:۳۸

سلام.
بنده تا به امروز با B4A کار نکردم، اما به هر حال باید بعد از مرحله تعریف TextView و شناسایی آن با متغیری با نام tv ، سایر کدنویسی ها مشابه باشد.
دقیقا مشکلتان در کدام بخش کدها است ؟

یاسر
۱۳۹۵/۰۷/۱۲
۱۶:۰۸

متاسفانه در b4a تکست ویو همون لیبل هست
و تو لیبل هم امکان نداره کدهای html کامپایل بشه
یعنی هر چی از دیتابیس میخونه عینا چاپ میکنه ) :
باید واسش کد جاوا نوشت تا اول متغیرها تو یه متغیر ذخیره بشن
بعد کدهای html تو یه تابع به متن تبدیل بشن
بعد اون تابع رو تو لیبل صدا زد
که متاسفانه من با جاوا اشنایی زیاد ندارم بخاطر همین لنگ هستم کل اینترنت هم زیر و رو کردم و هیچ اموزش رایگان یا غیر رایگان وجود نداره
از پاسخی که دادید سپاسگذارم
در ضمن یه سوال دیگه هم داشتم میخاستم ببینم راهی هست تا از فایل دیتا بیس تگهای html  رو از داخل تمام رکوردهاش حذف کرد اگه راهی باشه (یعنی تعداد رکورد ها خیلی زیاده و تک به تک نمیشه)
من دیگه اینو بیخیال میشم
اگه راهی باشه ممنون میشم ارایه بدین معذرت میخام اسباب دردسر شدم
یاعلی

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)