شاید تا بحال به این موضوع برخورده باشید که بخواید متن داخل TextView رو به صورت Bold یا Italic یا Bold_Italic کنید
همزمان بخواید فونت دلخواه خودتون رو هم بهش اضافه کنید کنید
اینجاست که به مشکل برمیخورد و نمیتونید اینها رو مدیریت کنید
برای مثال : من به Textview1 فونت Homa رو دادم و به TextView2 فونت Titr و .....
حالا اگه بخوام برای مثال TextView1 رو به Bold
TextView2 رو به Italic
TextView3 رو از حالت Bold خارج کنم
بدون اینکه فونت اونها عوض بشه یا اینکه اگر حالتهای دیگه ای از style بر روی اونها هستش غیرفعال نشن.
یا اینکه بخواید نام فونت TextView1 رو بدونید و به TextView3 هم همون فونت رو بدید
اینجا دیگه توابع موجود در TextView کافی نیستن.
روش های متفاوتی برای حل این مشکل وجود داره ولی بهترین روش گشترس دادن TextView خود اندروید هستش
برای این کار یه کلاس اختصاصی میسازید و کدهای زیر رو بهش اضافه میکنید.
( با فرض بر اینکه فونت های شما در پوشه assets/fonts وجود دارن)
MyTextView.java
حالا میتونید از MyTextView در قسمت Layout یا در کد هاتون استفاده کنید
متدهای :
setFontName
getFontName
getTextTypeFaceStyle
setTextTypeFaceStyle
مقادیر getFontName و setFontName از نوع String هستش
مقادیر getTextTypeFaveStyle و setTextTypeFaceStyle از نوع TextTypeFaceStyle هستش که مقادیر BOLD , ITALIC , NORMAL , BOLD_ITALIC در داره.
اگر نیاز به تعییر رنگ یا سبک قسمت خاضی از متن و داشتید براحتی با اضافه کردن چند شرط تابع به این کلاس اون رو بیشتر گسترش بدید.
همزمان بخواید فونت دلخواه خودتون رو هم بهش اضافه کنید کنید
اینجاست که به مشکل برمیخورد و نمیتونید اینها رو مدیریت کنید
برای مثال : من به Textview1 فونت Homa رو دادم و به TextView2 فونت Titr و .....
حالا اگه بخوام برای مثال TextView1 رو به Bold
TextView2 رو به Italic
TextView3 رو از حالت Bold خارج کنم
بدون اینکه فونت اونها عوض بشه یا اینکه اگر حالتهای دیگه ای از style بر روی اونها هستش غیرفعال نشن.
یا اینکه بخواید نام فونت TextView1 رو بدونید و به TextView3 هم همون فونت رو بدید
اینجا دیگه توابع موجود در TextView کافی نیستن.
روش های متفاوتی برای حل این مشکل وجود داره ولی بهترین روش گشترس دادن TextView خود اندروید هستش
برای این کار یه کلاس اختصاصی میسازید و کدهای زیر رو بهش اضافه میکنید.
( با فرض بر اینکه فونت های شما در پوشه assets/fonts وجود دارن)
MyTextView.java
کد پیاچپی:
import android.content.Context;
import android.graphics.Typeface;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView;
public class MyTextView extends TextView {
public enum TextTypeFaceStyle {
NORMAL, BOLD, ITALIC, BOLD_ITALIC
}
Context mContext;
AttributeSet mAttributeSet;
int mDefStyleAttr;
String mFontName;
TextTypeFaceStyle mTextTypeFaceStyle = TextTypeFaceStyle.NORMAL;
public MyTextView(Context context) {
super(context);
this.mContext = context;
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = context;
this.mAttributeSet = attrs;
}
public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
this.mAttributeSet = attrs;
this.mDefStyleAttr = defStyleAttr;
}
public TextTypeFaceStyle getStyleState() {
return mTextTypeFaceStyle;
}
public TextTypeFaceStyle setTextTypeFaceStyle(TextTypeFaceStyle style) {
switch (style) {
case NORMAL:
Typeface mTypeFace;
if (!TextUtils.isEmpty(mFontName)) {
try {
mTypeFace = Typeface.createFromAsset(mContext.getAssets(), "fonts/" + mFontName + ".ttf");
this.setTypeface(mTypeFace);
} catch (Exception e) {
this.setTypeface(Typeface.DEFAULT);
}
mTextTypeFaceStyle = TextTypeFaceStyle.NORMAL;
} else {
this.setTypeface(Typeface.DEFAULT);
mTextTypeFaceStyle = TextTypeFaceStyle.NORMAL;
}
break;
case BOLD:
if (!TextUtils.isEmpty(mFontName)) {
try {
mTypeFace = Typeface.createFromAsset(mContext.getAssets(), "fonts/" + mFontName + ".ttf");
this.setTypeface(mTypeFace,Typeface.BOLD);
} catch (Exception e) {
this.setTypeface(Typeface.DEFAULT,Typeface.BOLD);
}
mTextTypeFaceStyle = TextTypeFaceStyle.BOLD;
} else {
this.setTypeface(null, Typeface.BOLD);
mTextTypeFaceStyle = TextTypeFaceStyle.BOLD;
}
break;
case ITALIC:
if (!TextUtils.isEmpty(mFontName)) {
try {
mTypeFace = Typeface.createFromAsset(mContext.getAssets(), "fonts/" + mFontName + ".ttf");
this.setTypeface(mTypeFace, Typeface.ITALIC);
}catch (Exception e) {
this.setTypeface(Typeface.DEFAULT, Typeface.ITALIC);
}
mTextTypeFaceStyle = TextTypeFaceStyle.ITALIC;
} else {
this.setTypeface(null, Typeface.ITALIC);
mTextTypeFaceStyle = TextTypeFaceStyle.ITALIC;
}
break;
case BOLD_ITALIC:
if (!TextUtils.isEmpty(mFontName)) {
try {
mTypeFace = Typeface.createFromAsset(mContext.getAssets(), "fonts/" + mFontName + ".ttf");
this.setTypeface(mTypeFace, Typeface.BOLD_ITALIC);
}catch (Exception e) {
this.setTypeface(Typeface.DEFAULT, Typeface.BOLD_ITALIC);
}
mTextTypeFaceStyle = TextTypeFaceStyle.BOLD_ITALIC;
} else {
this.setTypeface(null, Typeface.BOLD_ITALIC);
mTextTypeFaceStyle = TextTypeFaceStyle.BOLD_ITALIC;
}
break;
}
return mTextTypeFaceStyle;
}
public String getFontName() {
return mFontName;
}
public void setmFontName(String mFontName) {
this.mFontName = mFontName;
}
}
حالا میتونید از MyTextView در قسمت Layout یا در کد هاتون استفاده کنید
متدهای :
setFontName
getFontName
getTextTypeFaceStyle
setTextTypeFaceStyle
مقادیر getFontName و setFontName از نوع String هستش
مقادیر getTextTypeFaveStyle و setTextTypeFaceStyle از نوع TextTypeFaceStyle هستش که مقادیر BOLD , ITALIC , NORMAL , BOLD_ITALIC در داره.
اگر نیاز به تعییر رنگ یا سبک قسمت خاضی از متن و داشتید براحتی با اضافه کردن چند شرط تابع به این کلاس اون رو بیشتر گسترش بدید.