2015-08-16 34 views
-1

林getAssets()試圖從加載custome字體 「資產\字體」 文件夾獲取字體與getResources()從資產文件夾返回NullPointerException異常

這是我的 「TypefaceSingelton」 類代碼:

public class TypefaceSingelton { 

     private static TypefaceSingelton instance = new TypefaceSingelton(); 

     private TypefaceSingelton() {} 

     public static TypefaceSingelton getInstance() { 
      return instance; 
     } 
     public static Typeface getFont() { 
      return Typeface.createFromAsset(AppContext.getAppContext(). 
      getResources().getAssets(), "fonts/Myfont.otf"); 
     } 
    } 

和我的 「AppContext」 類:

public class AppContext extends Application { 

    public static Context context; 
    @Override 
    public void onCreate(){ 

     super.onCreate(); 
     AppContext.context = getApplicationContext(); 
    } 
    public static Context getAppContext() { 
     return AppContext.context; 
    } 

}

,我該如何使用它我的MainActivity內:

public class MainActivity extends Activity { 

    private final Typeface FontTF = TypefaceSingelton.getFont(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     final AutoCompleteTextView CtextView = (AutoCompleteTextView) findViewById(R.id.autoComplete); 
     CtextView.setTypeface(FontTF); 

,並在 「Typeface.createFromAsset」 裏面TypefaceSingelton給出了異常:

08-16 07:55:51.834: E/AndroidRuntime(3109):  Caused by: java.lang.NullPointerException 
08-16 07:55:51.834: E/AndroidRuntime(3109):  at com.test.TypefaceSingelton.getFont(TypefaceSingelton.java:20) 
08-16 07:55:51.834: E/AndroidRuntime(3109):  at com.test.MainActivity.onCreate(MainActivity.java:133) 
08-16 07:55:51.834: E/AndroidRuntime(3109):  at android.app.Activity.performCreate(Activity.java:5104) 
08-16 07:55:51.834: E/AndroidRuntime(3109):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 

即時通訊將使用 「TypefaceSingelton」,以避免性能除了

private final Typeface FontTF; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Typeface FontTF = TypefaceSingelton.getFont(); 
+3

me =「{packege} .AppContext」...> ...' –

回答

5

你試過了嗎?

public static Typeface getFont() { 
      return Typeface.createFromAsset(AppContext.getAppContext().getAssets(), 
      "fonts/Myfont.otf"); 
     } 
0

注意otf字體在Android不支持。只是TTF字庫

爲什麼不使用自定義類TypefacedTextView其延長AppCompatTextView和附加型臉財產

public class TypefacedTextView extends AppCompatTextView { 

public TypefacedTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 

    TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.TypefacedTextView); 
    String fontName = styledAttrs.getString(R.styleable.TypefacedTextView_typeface); 
    setTypeFace(fontName); 

    styledAttrs.recycle(); 
} 

public void setTypeFace(String fontName){ 
    try{ 
     Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/" + fontName); 
     setTypeface(typeface); 

    }catch (Exception e){ 
    } 
} 

創建設置樣式而像這樣

<declare-styleable name="TypefacedTextView"> 
    <attr name="typeface" format="string" /> 
</declare-styleable> 

一個設置樣式您在添加此設置樣式如果應用程序名稱是AppContext,請檢查您的清單文件:`

相關問題