0

外部フォントを定義した新しいクラスを作成しても、外部フォントを取得できません。

FontStyle.Java

public class FontStyle extends Activity{
    public final static String roboto_regular = "fonts/roboto_regular.ttf";
    public Typeface font_roboto_regular = Typeface.createFromAsset(getAssets(),
        roboto_regular);

}

およびMainActivity.Java

public class MainActivity extends Activity {
FontStyle font_style;
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
            fontStyling();
    }

   private void fontStyling() {
   TextView test= (TextView) findViewById(R.id.tv_test);
   test.setTypeface(font_style.font_roboto_regular );
}

このエラーまたはlogcatが発生します:

 java.lang.RuntimeException: Unable to start activity  ComponentInfo{com.test/com.test.MainActivity}: java.lang.NullPointerException

訂正してください:よろしくお願いします。

4

1 に答える 1

2

FontStyleまず、メソッドにアクセスするためにアクティビティコンテキストを渡す必要がありますgetAssets。FontStyleがアクティビティでない場合、Activityをそれに拡張する必要はありません。FontStyleクラスを次のように変更します。

public class FontStyle {
Context context;
public final static String roboto_regular = "fonts/roboto_regular.ttf";
public FontStyle(Context context){
 this.context=context;
}
  public Typeface getTtypeface(){
     Typeface font_roboto_regular = 
        Typeface.createFromAsset(context.getAssets(),roboto_regular);

    return font_roboto_regular;
  }
}

次に、TextViewのカスタムフォントを設定するようにアクティビティコードを変更します。

public class MainActivity extends Activity {
FontStyle font_style;
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        font_style=new FontStyle(MainActivity.this);
        fontStyling();
    }

private void fontStyling() {
TextView test= (TextView) findViewById(R.id.tv_test);
test.setTypeface(font_style.getTtypeface());
}
于 2013-02-08T05:40:24.687 に答える