آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

راهکار های استفاده از فونت در برنامه های اندروید

مجتبی یگانه  10 سال پیش  9 سال پیش
+26 0

با توجه به آموزش ساخت کتاب و بی نتیجه ماندن تلاش ها ، پیشنهاد استاد رو در رابطه با ایجاد یک تاپیک در این مورد عملی میکنم.

دوستانی که قصد همکاری دارند می توانند :

  1. روش هایی رو که تست کردید و جواب گرفتید رو با درج سورس کد گویا به عنوان پاسخ درج کنید.
  2. فونت هایی رو که به فرمت SVG تبدیل و سلامت فایل رو در WebView اندروید تست کردید ، در پاسخ درج کنند.
  3. در صورتی که از سلامت فایل SVG مطمئن نیستید به عنوان کامنت درج کنید تا سایر دوستان تست کنند.
  4. ابزار هایی رو که برای تبدیل فونت به فرمت SVG و با یونیکد UTF-8 می شناسید معرفی کنید (آموزش استفاده از ابزار بسیار مفید است)
  5. اطلاعاتی در مورد پشتیبانی هر یک از روش ها در ورژن های مختلف می تواند پاسخی به این تاپیک باشد.

(لطفا پیشنهاد هاتون رو برای جامع تر شدن تاپیک رو در کامنت درج کنید) 

0 0
بالا ! (10 سال پیش)
0 0
up (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
مجتبی یگانه  10 سال پیش
+24 0

من خودم تا الان از WebView برای نمایش محتوا استفاده نکردم و خیلی باب سلیقه ام نیست ، تنها مشکلی هم که با روش فعلی ایم دارم Justify کردن متن هست که احتمالا بزودی خودم واسش آستین بالا بزنم :)

من برای خودم یک Book Text Parser Module نوشتم و یک سینتکس خاص برای متن کتاب ها در نظر میگیرم برای پردازش تصاویر هر جایی در parser ام تصویر شناسایی شد ، یک imageView به لایه ی والد اضافه میکنم ( linearLayout.addView ) که چون بحث در مورد تصویر نیست خیلی وارد جزئیات نمیشم.

سبک و رنگ دادن به متن ها رو 3 دسته کردم :

  1. انتخاب رنگ و استایل های رایج متن
  2. انتخاب فونت
  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);

با این روش پروژه ی فعلی من قابلیت های زیر رو داره :

  1. اندازی متن
  2. ارتفاع خطوط
  3. رنگ متن
  4. رنگ عنوان
  5. رنگ پس زمینه
  6. پشتیبانی 8 فونت با قابلیت بارگذاری فونت از کارت حافظه

ترازبندی متن - Text Justify

این روش به نظر خودم به جز Justify بودن ، مشکلی نداشت، برای حل این مشکل هم چند کتابخانه پیدا کردم اما چون HTML رو ساپورت نمی کردن ، یک ویژگی اساسی دیگه رو از برنامه ام می گرفت.

پس فعلا در تلاش هسیتم D:

+3 0
بعله ! ، 50 دقیقه وقتم ام رو گرفت :) - پس یه دعای خیری هم بکنید ! (10 سال پیش)
0 0
آفرین خوبه در نوع خودش. میگم ما دنبال چیزهای خاص هستیم اونوقت شما دارید پنجاه دقیقه روی ظاهرسازی وقت میگذارید؟ حیفه، برادر من کار مهمتری نداری شما؟ :دی یه نیگا به بوکمارکات بکن ، چشمک (10 سال پیش)
0 0
خسته نباشی عالی بود :D (10 سال پیش)
0 0
rayaCoder@ یکم وقتم آزاد تر از قبل شده ، بزودی بهت خبر میدم :) (10 سال پیش)
0 0
@َA.L.U مرسی (10 سال پیش)
0 0
قابلیت بارگذاری فونت از کارت حافظه با چه تکنیکیه؟ کد نمیخوام راهنمایی کافیه! حالا اگر هم کدی اونجا باشه مشکلی ندارم :) (10 سال پیش)
0 0
مجتبی جان حالا شما کلا این روش رو بهتر میدونید یا با استفاده از دیتابیس؟ (10 سال پیش)
0 0
ساخت فونت از کارت حافظه ! Typeface.createFromFile(String path)z (10 سال پیش)
0 0
@میلاد ، بحث بحث ذخیره سازی نیست ! ، شما به هر حال به بانک نیاز دارید ، و باید متن ترکیب شده با html رو در بانک ذخیره کنید ، من کلا با ذخیره به صورت html مخالف ام (10 سال پیش)
0 0
خب حالا در مورد بارگذاری فونت از کارت حافظه؟ (10 سال پیش)
0 0
مثل اینکه زیاد کار شاخی نبود ببخشید نظر رو ندیدم (10 سال پیش)
0 0
با این روشی که از TextView استفاده میکنه، چجوری میشه عکس هم بین متن گذاشت؟ (10 سال پیش)
0 0
لینک (10 سال پیش)
0 0
منظورم عکس بین تگ های html بود، مثل webView (10 سال پیش)
0 0
اگر تگ های html رو در TextView استفاده میکنید ، همون روش جواب میده ، اما برای وب ویو روش خاص خودش هست که استاد هم آموزش دادند (10 سال پیش)
0 0
گاری به webView ندارم، گفتم مثل اون :)، از این روش هم استفاده کردم، عکس هایی که بین تگ img هستند رو نشون نمیده، این که شما لینکشو گذاشتی باش میشه 4 جهت textView عکس گداشت (10 سال پیش)
0 0
فک کنم یه چیزی مثل اون imageParserی که گفتیدو لازم دارم (10 سال پیش)
+1 0
راه حل همونه :) ، لینک اون روشی که من گفتم تصاویر رو از متن میگیره و یه ایمیج ویو میسازه :) (10 سال پیش)
0 0
خیلی ممنونم ازت مجتبی جان:) (10 سال پیش)
+1 0
آقا محسن چون سوال شما هم بود جواب دادم لینک (10 سال پیش)
0 0
مرسی مجتبی جان ، ردیف شد... (10 سال پیش)
0 0
سلام. راه حل بالا خیلی عالی بود .فقط line-height رو چطور میشه اعمال کرد؟ (9 سال پیش)
+1 0
textView.setLineSpacing(1, 2); این کد رو برای سوال بالایی ام پیدا کردم. (9 سال پیش)
پاسخ به سوال 
f-Dehghan  9 سال پیش
0 0

چطور میشه هر پاراگراف رو با فونت خاصی نمایش داد؟

   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>

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .