کلیدستان

نسخه‌ی کامل: ساخت TextView اختصاصی (برنامه نویسی اندروید)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
شاید تا بحال به این موضوع برخورده باشید که بخواید متن داخل TextView  رو به صورت Bold یا Italic یا 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 {
 
       NORMALBOLDITALICBOLD_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 contextAttributeSet attrs) {
 
       super(contextattrs);
 
       this.mContext context;
 
       this.mAttributeSet attrs;
 
   }

 
   public MyTextView(Context contextAttributeSet attrsint defStyleAttr) {
 
       super(contextattrsdefStyleAttr);
 
       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(nullTypeface.BOLD);
 
                   mTextTypeFaceStyle TextTypeFaceStyle.BOLD;
 
               }
 
               break;
 
           case ITALIC:
 
               if (!TextUtils.isEmpty(mFontName)) {
 
                   try {
 
                       mTypeFace Typeface.createFromAsset(mContext.getAssets(), "fonts/" mFontName ".ttf");
 
                       this.setTypeface(mTypeFaceTypeface.ITALIC);
 
                   }catch (Exception e) {
 
                       this.setTypeface(Typeface.DEFAULT, Typeface.ITALIC);
 
                   }
 
                   mTextTypeFaceStyle TextTypeFaceStyle.ITALIC;
 
               } else {
 
                   this.setTypeface(nullTypeface.ITALIC);
 
                   mTextTypeFaceStyle TextTypeFaceStyle.ITALIC;
 
               }
 
               break;
 
           case BOLD_ITALIC:
 
               if (!TextUtils.isEmpty(mFontName)) {
 
                   try {
 
                       mTypeFace Typeface.createFromAsset(mContext.getAssets(), "fonts/" mFontName ".ttf");
 
                       this.setTypeface(mTypeFaceTypeface.BOLD_ITALIC);
 
                   }catch (Exception e) {
 
                       this.setTypeface(Typeface.DEFAULT, Typeface.BOLD_ITALIC);
 
                   }

 
                   mTextTypeFaceStyle TextTypeFaceStyle.BOLD_ITALIC;
 
               } else {
 
                   this.setTypeface(nullTypeface.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 در داره.

اگر نیاز به تعییر رنگ یا سبک قسمت خاضی از متن و داشتید براحتی با اضافه کردن چند شرط تابع به این کلاس اون رو بیشتر گسترش بدید.