ورود

View Full Version : یکبار برای همیشه- عدم نمایش فونت فارسی در webview



reza5791
یک شنبه 03 آبان 1394, 10:39 صبح
با درود - ده روزی میشه که تمام گوگل و سایت های مرتبط رو زیر و رو کرده ام و دریغ از یک اموزش و یا راهنمایی خوب..
بی شک خیلی ها مشکل بنده رو دارند و یا تجربه کرده اند که کلافه کننده است
بنده یک پروژه دارم که تحت سرور PHP می باشد و به صورت آنلاین بر اساس API تعریف شده صفحات را فراخوانی می کند. در این پروژه از textview / listview / webview استفاده می کنم
تمامی مطالب به صورت فارسی می باشند که در دو شی text / list view مشکلی در نمایش حروف فارسی دیده نمی شود. اما وقتی در سرور ساید مطلبی رو فارسی می نویسم حروف فارسی به صورت کاراکترهای نامشخص نمایش داده میشه.. اموزشهای مرتبط رو به صورت جسته گریختهیافته و سعی در برطرف کردن مشکل داشتم اما کاری از پیش نرفت
برای اینکه درک مطلب راحت تر باشه کدهای صفحه اصلی سرور و همچنین بخش نمایش محتوا در اندروید رو میذارم. این مشکل در هیچ جا به صورت درست و جامع جواب داده نشده. امید است دوستانی که اگاهی دارند به صورت کامل جواب داده تا همه استفاده ببریم

کد صفحه index.php که در اون charset utf-8 رو استفاده کرده ام

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

یک جای کار من ایراد دارد که قادر به درک اون نیستم
این بخش از کد برای نمایش html در webview استفاده شده که فکر کنم ایراد داره


webmdetail.setBackgroundColor(Color.parseColor("#ffffff"));
webmdetail.getSettings().setBuiltInZoomControls(tr ue);
webmdetail.getSettings().setDefaultTextEncodingNam e("UTF-8");
String mimeType = "text/html";
String encoding = "utf-8";
String htmlText = mdesc;

String Text = "<html><head>"
+ "<style type=\"text/css\">body{color: #000000;}"
+ "</style></head>"
+ "<body>"
+ htmlText
+ "</body></html>";


webmdetail.loadData(Text, mimeType, encoding);

دوستانی که در این زمینه تجربه دارند خواهشمندم راهنمایی بفرمایند یا به صورت یک اموزش جامع در بخش جداگانه مطرح بفرمایند
با سپاس

reza5791
دوشنبه 04 آبان 1394, 10:52 صبح
بالاخره متوجه مشکل عدم نمایش واژه های فارسی در وب ویو شدم
شما باید در صفحات html/ php یا هر صفحه دیگری که از local یا online فراخوانی می کنید باید در تگ head تابع meta رو قرار بدید
بدین صورت
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

پس از اینکار باید در هنگام فراخوانی داده ها از webview این مقدار ها را تعریف نمایید


String DecodeHTML = "<html><head><style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/font/BMitra.ttf\")}body {font-family: MyFont;font-size: medium;text-align: justify;}</style></head><body>";
String pasBody = "</body></html>";
String myHtmlString = DecodeHTML + YourTxext + pasBody;
wv.loadDataWithBaseURL(null,myHtmlString, "text/html", "UTF-8", null);
من مشکلم در شیوه فراخوانی و تعریف ها بود اما مشکل اصلی من در loaddata و loaddatawithbaseURL بود که در اندروید های بالاتر باید loadDataWithBaseUrl فراخوانی کنید تا بتونید متون فارسی رو به درستی نمایش بدید

امیدوارم این شیوه به درد کسانی که مشکل من رو دارند بخوره

smakhavan
چهارشنبه 06 آبان 1394, 08:17 صبح
مطمئن هستید که این کار با اندروید بالای 4 جواب میده
من کد شما را دقیقبا 4.3 تست کردم که جواب نداد و فونتها همچنان اعمال نمیشه.

اگه واقعا جواب گرفته اید لطفا سورس کامل یک sample قرار بدهید، چون من مدت زیادی دنبال این موضوع بودم و آخر به این نتیجه رسیدم که روی وب ویو فونت فارسی را نمیشه برای اندورید های جدید اعمال کرد!:متعجب:

reza5791
پنج شنبه 14 آبان 1394, 16:01 عصر
بلی من انجام دادم و بر روی همه نسخه های اندروید تست کردم
سورس رو که نمیشه گذاشت چون برای اماده سازی نمونه باید اسکریپت php هم باشه که بتونید تست کنید
اما اگر چنین پروژه ای دارید و تمامی توابعبه درستی نوشته شده باشند از همین کد برای فراخوانی فونت فارسی در وب ویو استفاده کنید

reza5791
پنج شنبه 14 آبان 1394, 16:04 عصر
دقت داشته باشید زنجیره YourText باید تغییر داده بشه به چیزی که شما برای فراخوانی از سرور قرار داده اید
من زنجیره itemdesc رو برای این کار در نظر گرفته و به جای همین قرار دادم

slr560
پنج شنبه 14 آبان 1394, 16:58 عصر
از این راه حل استفاده کن
http://wptrafficanalyzer.in/blog/android-using-custom-ttf-fonts-in-webview/

smakhavan
شنبه 16 آبان 1394, 08:49 صبح
از این راه حل استفاده کن
http://wptrafficanalyzer.in/blog/android-using-custom-ttf-fonts-in-webview/

این راه حل برای فونتهای فارسی جواب نمیده.

smakhavan
شنبه 16 آبان 1394, 09:08 صبح
بلی من انجام دادم و بر روی همه نسخه های اندروید تست کردم
سورس رو که نمیشه گذاشت چون برای اماده سازی نمونه باید اسکریپت php هم باشه که بتونید تست کنید
اما اگر چنین پروژه ای دارید و تمامی توابعبه درستی نوشته شده باشند از همین کد برای فراخوانی فونت فارسی در وب ویو استفاده کنید

من که نمیگم کل پروژه تجاری تان را بفرسید. یک نمونه ساده ارسال کنید تا بقیه تست کنند.
چه نیازی به php هست؟ با توجه به مطالبی که شما که گفتید (البته اگه درست متوجه شده باشم) این کد باید جواب بده. حالت انگلیسی اش جواب میده اما وقتی فونت فارسی را فعال کنیم جواب نمیده.
کل پروژه را هم به پیوست ارسال میکنم که اگه لطف کنید و اگه جایی اشتباه شده تغییر بدهید.

لینک دانلود
http://s3.picofile.com/file/8221413342/WebViewCustomFont.zip.html




mWebView = (WebView) findViewById(R.id.webview);
// حالت انگلیسی که جواب میدهد
// String DecodeHTML = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'/><style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/BLKCHCRY.TTF\")}body {font-family: MyFont;font-size: medium;text-align: justify;}</style></head><body>";
// حالت فارسی که عمل نمیکند
String DecodeHTML = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'/><style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/BYEKAN.TTF\")}body {font-family: MyFont;font-size: medium;text-align: justify;}</style></head><body>";
String pasBody = "</body></html>";
String myHtmlString = DecodeHTML + "متن فارسی نمونه" + "English Sample Text" + pasBody;
mWebView.loadDataWithBaseURL(null, myHtmlString, "text/html", "UTF-8", null);