2013-08-21 131 views
0

我有一個擴展FragmentActivity的類,在我創建的Fragment裏面只有一個textView。動態地改變textview中的片段

我想放在動作條(已完成),可以使這個TextView的用戶改變字體類型的設置按鈕。

我怎麼能實現這個?

我還有一個問題,那就是FragmentActivity中片段的數量並不爲先驗知... 所以當我改變我的字體類型時,我想改變每一個片段。

我試圖把一個方法changefont我的片段裏面,但我不知道我怎麼會管理..

public void setFont(){ 
      TextView textView = (TextView) getView().findViewById(R.id.detailsText); 
      textView.setTypeface(); 
//Another problem how set typeface, because 
//Typeface font = Typeface.createFromAsset(getAssets(),"fonts/font.tff"); couldn't work because I'm inside a Fragment and getAssets() just rise errors.. 
     } 

我很卡..難道你們能幫我嗎?

回答

0

使一類的東西叫做Utils.java並把這個方法: -

public static void setFontSignika_Bold(TextView textView) { 
      Typeface tf = Typeface.createFromAsset(textView.getContext() 
        .getAssets(), "fonts/signikabold.ttf"); 

      textView.setTypeface(tf); 

     } 

現在,你可以通過這種方式在整個應用程序使用此: -

Utils.setFontSignika_Bold(textView); // Pass your textview object 
+0

我有一個NullPointerExeption,因爲我想獲得一個TextView從動作條片段內。所以當我調用這個方法時,我使用參數((TextView)findViewById(R.id.text));但當然這會引發異常 –

0

您也可以創建TextView的子類並在裏面設置字體。 Context對象包含getAssets()方法:)

例實施擴展文本視圖:

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); 
    setPaintFlags(getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG | Paint.DEV_KERN_TEXT_FLAG); 
     return true; 
    } 

} 
+0

不是我的第一個問題,我必須從ActionBar訪問Fragment中的TextView:/ –