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

آموزش تغییر فونت TextView بدون نیاز به تعریف در فایل جاوا

محسن علیزاده  11 سال پیش  10 سال پیش
+10 0

درود،
شاید تا به حال برایتان پیش آمده باشد که تعدادی TextView ی استاتیک داشته باشید که صرفا فقط برای نمایش نوشته در برنامه تان به کار رفته اند.

خب اگر قرار باشد تک تک این تکست ویوها رو در فایل های جاوامون تعریف کنیم و با Typeface به اونها فونت بدیم، کاری بس وقت گیر و غیرحرفه ای شمار می رود.
با استفاده از این روشی که خدمتتان توضیح داده خواهد شد می توانید به صورت ساده تر، سریع تر و تمیز تر فونت TextView ها رو عوض کنید.

همراه باشید...

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
محسن علیزاده  11 سال پیش
+4 0

ابتدا در پکیج برنامتون یک فایل جاوا به نام 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);

امیدوارم مفید واقع بشه

0 0
ایراد این روش اینه که توی اکلیپس(اندروید استودیو رو نمیدونم) دیگه پیش‌نمایش صفحه XML رو نخواهی داشت (11 سال پیش)
0 0
من این مشکل رو ندارم عزیز (11 سال پیش)
0 0
از اکلیپس استاد استفاده می‌کنین؟ (11 سال پیش)
+1 0
آره، توی یکی از پروژه هام همچین مشکلی داشتم که البته مشکل از این موضوع نبود، عناوین رو درست وارد نکرده بودم، شما هم چک کنید عناوینی مثل app:customFont به جاش app1:customFont نیومده باشه و... (11 سال پیش)
+2 0
ربطه به نسخه اکلیپس نداره ، دستورات در جاوا برای نمایش به صورت آفلاین در اکلیپس نیاز به پردازش دارند برای رفع این مشکل باید بالا دستوراتی که محاسبانتی هستند یک شر بگذارید که داخلش از این استفاده میشه و از return میشه .if(isInEditMode) (11 سال پیش)
+3 0
فکر میکنم این آموزش هم بتونه کمک زیادی بهتون بکنه در استفاده از فونت به جای روش استاتیک لینک (11 سال پیش)
پاسخ به سوال 
محسن علیزاده  10 سال پیش
+4 0

اعمال یک فونت برروی کلیه متون و نوشته ها (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.java
public 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>

با تشکر از دوست خوبم مهدی.
موفق باشید.


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