انجمن سایت کلیدستان



ساخت TextView اختصاصی (برنامه نویسی اندروید)زمان کنونی: ۱۳۹۵/۰۹/۱۴، ۰۶:۴۲ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: mahdi10539
آخرین ارسال: mahdi10539
پاسخ 1
بازدید 203

رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
ساخت TextView اختصاصی (برنامه نویسی اندروید)

ساخت TextView اختصاصی (برنامه نویسی اندروید)

#1
شاید تا بحال به این موضوع برخورده باشید که بخواید متن داخل 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 در داره.

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


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)