مقدمه
همیشه ست کردن فونت به همه جای برنامه مشکلات و سختی های خود را به همراه داشته است. دو روش اصلی وعمومی در برنامه های اندروید روش های زیر می باشد.
روش اول
در برنامه های اندروید استفاده از کلاس typeface برای تک تک ویوهای موجود در ظاهر برنامه می باشد. که کاری زمان بر و خسته کننده می باشد
روش دوم
ساخت ویو های جدید و تعریف فونت با استفاده از typeface در ویو جدید. که باز اگر تعداد فونت ها زیاد باشد سختی های خودش را دارد و حتی در صورت پیاده سازی اشتباه در افت سرعت لود برنامه ها تاثیر زیادی خواهد داشت.
با استفاده از کتابخانه Calligraphy دیگر نیازی به انجام کارهای سخت ذکر شده نمی باشد و به راحتی می توانید هر تعداد فونتی خواستید به ظاهر برنامه خود اعمال کنید.
پرسش و پاسخ در مورد کتابخانه
اولویت فونت ها
ترتیب اولویت تعریف فونت ها جهت اعمال به ترتیب زیر میباشد
- تعریف شده در xml ویو
- تعریف شده در xml استایل برنامه
- تعریف textAppearance در استایل های برنامه
- بصورت تعریف شده در Theme برنامه
- تعریف شده بصورت پیش فرض در کلاس Application برنامه
استثناها
در فریمورک اندروید دو ویو اصلی وجود دارد که از توابع عمومی تبعیت نمی کنند
- android.support.v7.widget.SwitchCompat
- android.widget.Switch
برای استفاده از این کتابخانه باید این ویو ها را شخصی سازی کنید.
دستور زیر را به فایل build.gradle پروژه خود اضافه کنید و اجازه دهید اندروید استودیو کتابخانه را دانلود نماید.
dependencies {
compile 'uk.co.chrisjenx:calligraphy:2.2.0'
}
روش اول - لود فونت بصورت پیش فرض برای کل برنامه
1- درپروژه خود فولدر Assets را ایجاد کرده و در یک فولدر به اسم fonts فونت های مورد نظر خود را اضافه کنید.
2- در برنامه خود یک کلاس جاوا با اسم MyApplication ایجاد کنید و از کلاس Application مشتق کنید و تابع onCreate آن را override کنید و کدهای کتابخانه را اضافه کنید.
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/BYekan.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
}
}
3- کلاس MyApplication را به منیفست ست کنید. در تگ application به عنوان خصیصه name ست کنید.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ir.varchar.calligraphy">
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
4- در اکتیویتی هایی که می خواهید فونت ست شود کدهای زیر را وارد نمایید.
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
7- حال در فایل layout خود هر آبجکتی می خواهید اضافه کنید و برنامه را اجرا کنید.
روش دوم - تعریف فونت به ویو های خاص برنامه
1- برای اعمال فونت متفاوت بصورت مستقیم در هر ویو ویژگی زیر را در فایل xml ظاهر برنامه وارد کنید.
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/activity_horizontal_margin"
android:gravity="right"
android:text="@string/text1"
android:textSize="16dp" />
2- در اکتیویتی هایی که می خواهید فونت ست شود کدهای زیر را وارد نمایید.
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
3- برنامه را اجرا کنید.
روش سوم - استفاده با استفاده از تعریف textAppearance
1- کد های خود را بشکل زیر به فایل xml استایل وارد نمایید.
<style name="TextAppearance.FontPath" parent="android:TextAppearance">
<!-- Custom Attr-->
fonts/RobotoCondensed-Regular.ttf
</style>
2- textAppearance خود را بشکل زیر در ویو های مورد نظر وارد کنید.
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/TextAppearance.FontPath"/>
3- در اکتیویتی هایی که می خواهید فونت ست شود کدهای زیر را وارد نمایید.
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
4- برنامه را اجرا کنید.
روش چهارم - استفاده از طریق تعریف مستقل در فایل استایل
1-بصورت زیر استایل خود را تعریف کنید.
<style name="TextViewCustomFont">
fonts/RobotoCondensed-Regular.ttf
</style>
2- استایل را در ویو های مورد نظر استفاده کنید.
3- در اکتیویتی هایی که می خواهید فونت ست شود کدهای زیر را وارد نمایید.
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
4- برنامه را اجرا کنید.
روش پنجم - ست کردن با استفاده از تعریف در تم برنامه
1- بصورت زیر فونت خود را در تم تعریف کنید.
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
@style/AppTheme.Widget.TextView
</style>
<style name="AppTheme.Widget"/>
<style name="AppTheme.Widget.TextView" parent="android:Widget.Holo.Light.TextView">
fonts/Roboto-ThinItalic.ttf
</style>
2- در اکتیویتی هایی که می خواهید فونت ست شود کدهای زیر را وارد نمایید.
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
3- برنامه را اجرا کنید.