آموزش تغییر فونت TextView بدون نیاز به تعریف در فایل جاوا
درود،
شاید تا به حال برایتان پیش آمده باشد که تعدادی TextView ی استاتیک داشته باشید که صرفا فقط برای نمایش نوشته در برنامه تان به کار رفته اند.
خب اگر قرار باشد تک تک این تکست ویوها رو در فایل های جاوامون تعریف کنیم و با Typeface به اونها فونت بدیم، کاری بس وقت گیر و غیرحرفه ای شمار می رود.
با استفاده از این روشی که خدمتتان توضیح داده خواهد شد می توانید به صورت ساده تر، سریع تر و تمیز تر فونت TextView ها رو عوض کنید.
همراه باشید...
ابتدا در پکیج برنامتون یک فایل جاوا به نام TextViewPlus بسازید و کد زیر را در آن قرار دهید:
package ir.example.name;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;
public class TextViewPlus extends TextView {
private static final String TAG = "TextView";
public TextViewPlus(Context context) {
super(context);
}
public TextViewPlus(Context context, AttributeSet attrs) {
super(context, attrs);
setCustomFont(context, attrs);
}
public TextViewPlus(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
setCustomFont(context, attrs);
}
private void setCustomFont(Context ctx, AttributeSet attrs) {
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);
String customFont = a.getString(R.styleable.TextViewPlus_customFont);
setCustomFont(ctx, customFont);
a.recycle();
}
public boolean setCustomFont(Context ctx, String asset) {
Typeface tf = null;
try {
tf = Typeface.createFromAsset(ctx.getAssets(), asset);
} catch (Exception e) {
Log.e(TAG, "Could not get typeface: "+e.getMessage());
return false;
}
setTypeface(tf);
return true;
}
}
سپس وارد پوشه res شوید و در شاخه values لی اوتی با نام attrs.xml بسازید و کد زیر را در آن بگنجانید:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TextViewPlus">
<attr name="customFont" format="string"/>
</declare-styleable>
</resources>
خب، 90% کار انجام شد! به همین سرعت...
به لی اوت مورد نظرتون برید و TextView تون رو به این حالت تغییر بدید:
<ir.example.name.TextViewPlus
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="تغییر فونت"
app:customFont="font/iransans.ttf" />
همونطور که مشاهده می کنید و مشخص هستش بوسیله app:customFont آدرس فونت دلخواه رو به تکست ویو پلاس ربط میدیم، توجه کنید که این آدرس از پوشه assets آدرس دهی شده است...
نکته: بعد از وارد کردن یک TextViewPlus به لی اوت یک خط کد به صورت خودکار به لایه اول لی اوت اضافه میشه، اگه نشد خودتون اون رو وارد کنید. نام پکیج رو تغییر بدید. (فراموش نشه):
xmlns:app="http://schemas.android.com/apk/res/ir.example.name"
اگر خواستید از طریق فایل جاوا به تکست ویو پلاس دسترسی داشته باشید از کد زیر استفاده کنید:
TextViewPlus text = (TextViewPlus) findViewById(R.id.TextView01);
امیدوارم مفید واقع بشه
اعمال یک فونت برروی کلیه متون و نوشته ها (toast، progressDialog، textview و...)
1- فایل جاوا با نام MyApp با اکستند application و آدرس دهی از فایل manifest.cml:
//MyApp.java
public class MyApp extends Application {
@Override
public void onCreate()
{
TypefaceUtil.overrideFont(getApplicationContext(), "SERIF", "fonts/Roboto-Regular.ttf");
}
}
آدرس دهی فونت دلخواه از پوشه assets توسط کد بالا صورت میگیرد: ^^^
آدرس دهی MyApp از فایل manifest.cml:
//manifest
<application
android:name=".MyApp"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@style/MyAppTheme" >
.
.
.
2- ساخت کلاس TypefaceUtil:
// TypefaceUtil.javapublic class TypefaceUtil {
public static void overrideFont(Context context, String defaultFontNameToOverride, String customFontFileNameInAssets) {
try {
final Typeface customFontTypeface = Typeface.createFromAsset(context.getAssets(), customFontFileNameInAssets);
final Field defaultFontTypefaceField = Typeface.class.getDeclaredField(defaultFontNameToOverride);
defaultFontTypefaceField.setAccessible(true);
defaultFontTypefaceField.set(null, customFontTypeface);
} catch (Exception e) {
Log.e("TypefaceUtil","Can not set custom font " + customFontFileNameInAssets + " instead of " + defaultFontNameToOverride);
}
}
}
3- اضافه کردن اتبیوت تایپ فیس به تم:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyAppTheme" parent="@android:style/Theme.Holo.Light">
<!-- you should set typeface which you want to override with TypefaceUtil -->
<item name="android:typeface">serif</item>
</style>
</resources>
با تشکر از دوست خوبم مهدی.
موفق باشید.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .