راهکار های استفاده از فونت در برنامه های اندروید
با توجه به آموزش ساخت کتاب و بی نتیجه ماندن تلاش ها ، پیشنهاد استاد رو در رابطه با ایجاد یک تاپیک در این مورد عملی میکنم.
دوستانی که قصد همکاری دارند می توانند :
- روش هایی رو که تست کردید و جواب گرفتید رو با درج سورس کد گویا به عنوان پاسخ درج کنید.
- فونت هایی رو که به فرمت SVG تبدیل و سلامت فایل رو در WebView اندروید تست کردید ، در پاسخ درج کنند.
- در صورتی که از سلامت فایل SVG مطمئن نیستید به عنوان کامنت درج کنید تا سایر دوستان تست کنند.
- ابزار هایی رو که برای تبدیل فونت به فرمت SVG و با یونیکد UTF-8 می شناسید معرفی کنید (آموزش استفاده از ابزار بسیار مفید است)
- اطلاعاتی در مورد پشتیبانی هر یک از روش ها در ورژن های مختلف می تواند پاسخی به این تاپیک باشد.
(لطفا پیشنهاد هاتون رو برای جامع تر شدن تاپیک رو در کامنت درج کنید)
من خودم تا الان از WebView برای نمایش محتوا استفاده نکردم و خیلی باب سلیقه ام نیست ، تنها مشکلی هم که با روش فعلی ایم دارم Justify کردن متن هست که احتمالا بزودی خودم واسش آستین بالا بزنم :)
من برای خودم یک Book Text Parser Module نوشتم و یک سینتکس خاص برای متن کتاب ها در نظر میگیرم برای پردازش تصاویر هر جایی در parser ام تصویر شناسایی شد ، یک imageView به لایه ی والد اضافه میکنم ( linearLayout.addView ) که چون بحث در مورد تصویر نیست خیلی وارد جزئیات نمیشم.
سبک و رنگ دادن به متن ها رو 3 دسته کردم :
- انتخاب رنگ و استایل های رایج متن
- انتخاب فونت
- ترازبندی متن - Text Justify
انتخاب رنگ و استایل های رایج متن
من از TextView استفاده میکنم و میدونید که قابلیتی داره که میتونید یک Spanned Text رو setText کنید ، Spanned Text در واقع متنی هست که با خصوصیت های html استایل خاصی گرفته مثلا
TextView txtBookText = new TextView(this); Spanned spanned = Html.fromHtml(
"<h2><font color='[TITLE_COLOR_HERE]'> Title</font></h2><p><font color='[TEXT_COLOR_HERE]'> Text </font></p>"
); txtBookText.setText(spanned);
همون طور که احتمالا میدونید میتونیم از این تگ ها استفاده کنیم
<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>
پس کار استایل دادن به متن ساده تر هم میشه ، اما برای اینکه رنگ متن هم درست اعمال کنم ، در زمان اجرا مقدارهای واقعی رو با FLAG هایی که در متن داشتم Replace میکنم
bookText.replace("TITLE_COLOR_HERE]", "#FF0000"); bookText.replace("[TEXT_COLOR_HERE]", "#0000FF");
پس رنگ متن هم به سادگی اعمال شد :)
انتخاب فونت
TextView قابلیتی به نام setTypeface داره (اولین بار در ماشین حساب استاد آموزش دادند) که میشه از یک فونت با فرمت رایج TTF استفاده کرد.
وقتی شما فونت ، اندازه ، جاذبه ، جهت متن و ... رو در TextView اعمال کنید ، هیچ تاثیر منفی ای در متن TextView که قبلا به صورت Spanned Text تعریف شده ، نداره و کاملا صحیح اعمال میشه.
پس مینویسم:
Typeface type1 = Typeface.createFromAsset(getAssets(), "fonts/Yekan.ttf"); txtBookText.setTypeface(type1);
با این روش پروژه ی فعلی من قابلیت های زیر رو داره :
- اندازی متن
- ارتفاع خطوط
- رنگ متن
- رنگ عنوان
- رنگ پس زمینه
- پشتیبانی 8 فونت با قابلیت بارگذاری فونت از کارت حافظه
ترازبندی متن - Text Justify
این روش به نظر خودم به جز Justify بودن ، مشکلی نداشت، برای حل این مشکل هم چند کتابخانه پیدا کردم اما چون HTML رو ساپورت نمی کردن ، یک ویژگی اساسی دیگه رو از برنامه ام می گرفت.
پس فعلا در تلاش هسیتم D:
چطور میشه هر پاراگراف رو با فونت خاصی نمایش داد؟
private void testTextView() {
final TextView textView = new TextView(this);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setGravity(Gravity.RIGHT);
textView.setLinksClickable(true);
Spanned spanned = Html.fromHtml(content);
Typeface type1 = Typeface.createFromAsset(getAssets(), "font/MITRA.TTF");
Typeface type2 = Typeface.createFromAsset(getAssets(), "font/NAST.TTF");
Typeface type3 = Typeface.createFromAsset(getAssets(), "font/ZAR.TTF");
if (content.contains("[font1]")) {/////////چطور اینجا شرط درست قرار بدم؟
textView.setTypeface(type1);
}
else if (content.contains("[font2]")) {
textView.setTypeface(type2);
} else {
textView.setTypeface(type3);
}
textView.setLineSpacing(1, 2);
textView.setText(spanned);
book.addView(textView);
}
توی فایل html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
</head>
<body>
<font face='[font1]'> تست فونت</font>
</br>
<font face='[font2]'> تست فونت</font>
</br>
<font face='[font3]'> تست فونت</font>
</body>
</html>
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .