PDA

View Full Version : تغییر فونت دوازده تکست ویو در یک صفحه



sco1385
سه شنبه 06 خرداد 1393, 09:31 صبح
من دوازده تکست ویو در یک صفحه دارم، که می‌خواهم فونت آنها را به بردیا تغییر دهم.

آیا باید این کد را دوازده بار تکرار کنم، یا راه بهتری هم هست تا فایل شلوغ نشود.



TextView myTextView_Top = (TextView) rootView.findViewById(R.id.textView11);
Typeface myTypeface_Top = Typeface.createFromAsset(getActivity().getAssets() , "fonts/BBARDIYA.TTF");
myTextView_Top.setTypeface(myTypeface_Top);


سوال دوم آن که:

الان نام فونت بردیا با حروف بزرگ نوشته شده است، آیا دلیل خاصی دارد؟

آیا می‌توان نام را به حروف کوچک تغییر دارد؟

آیا اصلاً می‌شود نام فونت را به دلخواه تغییر داد و آنگاه در پوشه فونت گذاشت؟

البته صرفاً آشنایی با مساله است و نه از بین بردن نام مولف و حق او در این مورد.

با تشکر

#root#
سه شنبه 06 خرداد 1393, 09:56 صبح
میشه یه کلاس از TextView مشتق کرد و با اعمال فونت مورد نظر از این TextView در برنامه استفاده کرد .
public class MyTextView extends TextView {

public static Typeface font;

public MyTextView(Context context) {
super(context);
if (!isInEditMode())
set(context);

}

public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
if (!isInEditMode())
set(context);
}

public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
if (!isInEditMode())
set(context);
}

private void set(Context context) {
font = Typeface.createFromAsset(context.getAssets(), "font");
this.setTypeface(font);
}

}
استفاده هم بدین صورت :
<ir.my.app.MyTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />

اما نام فایل فونت : هر اسمی که براش انتخاب کنید میشه استفاده کرد ، در کد بالا اسم فایل فونت در پوشه assets عبارت font هستش که به همین صورت هم در کد درج شده ، در کل نام فونت باید در هر دو جا یکسان باشه.

sco1385
سه شنبه 06 خرداد 1393, 11:14 صبح
بسیار سپاسگذارم.

عالی بود.

زنده باشی

Nevercom
سه شنبه 06 خرداد 1393, 16:56 عصر
می تونید از کد زیر هم استفاده کنید:
public void overrideFonts(final View v) { final boolean isBelowICS = VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH;
try {
if (v instanceof ViewGroup) {
final ViewGroup vg = (ViewGroup) v;
for (int i = 0; i < vg.getChildCount(); i++) {
final View child = vg.getChildAt(i);
overrideFonts(child);
}
} else {
final Typeface font = Typeface.createFromAsset(context.getAssets(),
"fonts/adob2.otf");
if (v instanceof TextView) {
((TextView) v).setTypeface(font);
if (isBelowICS) {
((TextView) v).setText(PersianReshape.reshape(((TextView) v).getText()
.toString()));
// v.setAnimation(AnimationUtils.loadAnimation(contex t,
// R.anim.button));
}
} else if (v instanceof EditText) {
((EditText) v).setTypeface(font);
if (isBelowICS) {
((EditText) v).setText(PersianReshape.reshape(((EditText) v).getText()
.toString()));
}
} else if (v instanceof Button) {
((Button) v).setTypeface(font);
if (isBelowICS) {
((Button) v).setText(PersianReshape.reshape(((Button) v).getText()
.toString()));
}


}
}


} catch (final Exception e) {
}
}

روش استفاده: برای اینکه کل View های یک Layout رو پردازش کنه، برای View (پارامتر ورودی) از android.R.id.content استفاده کنید:
overrideFonts(findViewById(android.R.id.content));