3

という名前の XML レイアウトを作成しましたdef_list。私はそれにIDを割り当てました。それはdef_list_textview. bn.ttfassets フォルダに呼ばれるフォントを置きました。

XML レイアウトは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/def_list_textview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="right" >
    </TextView>

しかし、コードを使用して書体を設定すると:

def_list_tv = (TextView)findViewById(R.id.def_list_textview);
Typeface tf = Typeface.createFromAsset(this.getAssets(), "fonts/bn.ttf");
def_list_tv.setTypeface(tf);

LogCat で nullPointerException が発生します。どうしてか分かりません。

これは私のLogCatです:

12-26 17:14:56.496: E/AndroidRuntime(1254): FATAL EXCEPTION: main
12-26 17:14:56.496: E/AndroidRuntime(1254): java.lang.RuntimeException: Unable to start activity ComponentInfo{net.adeveloper.handydic/net.adeveloper.dic.PortDef}: java.lang.NullPointerException
12-26 17:14:56.496: E/AndroidRuntime(1254):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at android.os.Looper.loop(Looper.java:123)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at android.app.ActivityThread.main(ActivityThread.java:3683)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at java.lang.reflect.Method.invokeNative(Native Method)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at java.lang.reflect.Method.invoke(Method.java:507)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at dalvik.system.NativeStart.main(Native Method)
12-26 17:14:56.496: E/AndroidRuntime(1254): Caused by: java.lang.NullPointerException
12-26 17:14:56.496: E/AndroidRuntime(1254):     at net.adeveloper.dic.PortDef.onCreate(PortDef.java:53)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at     android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-26 17:14:56.496: E/AndroidRuntime(1254):     at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-26 17:14:56.496: E/AndroidRuntime(1254):     ... 11 more
4

9 に答える 9

3

問題がある可能性があります

this.getAssets()

getAssets() は Context のメソッドなので、これの代わりに context オブジェクトを渡すようにしてください

試す

Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/bn.ttf");

また

Typeface tf = Typeface.createFromAsset(mContext.getAssets(), "fonts/bn.ttf");

ここで mContext は Context のオブジェクトです

編集 :

次のカスタム TextView が役立つかどうかを確認してください

public class CustomTextView extends TextView{
  public CustomTextView(Context context,AttributeSet attrs,int defStyle){
    super(context,attrs,defStyle);
    init();
  }
  public CustomTextView(Context context,AttributeSet attrs){
    super(context,attrs);
    init();
  }
  public CustomTextView(Context context){
    super(context);
    init();
  }

  private void init(){
    if(!isInEditMode()){
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/bn.ttf");
        setTypeface(tf);
    }
  }
}

以前のプロジェクトでこのクラスを使用しました

于 2013-12-26T14:15:28.843 に答える
0

fonts/ から書体ファイルを削除し、Assets フォルダー内に直接配置すると、動作するはずです! 助けてほしい

于 2013-12-26T16:49:53.520 に答える
0
def_list_tv = (TextView)findViewById(R.id.def_list_textview);   //line no 1
System.out.println("Textview==="+def_list_tv);
Typeface tf = Typeface.createFromAsset(this.getAssets(), "fonts/bn.ttf");
def_list_tv.setTypeface(tf); 

Logcat にTextview===nullが表示される場合は、1 行目に正しいテキストビュー ID を指定してください。この間違いをしたときに発生したのと同じエラーが発生しました。

于 2014-08-28T11:26:00.947 に答える
0

以下のような CustomTextView を作成してみてください。

public class CustomTextView extends TextView {

public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init();
}

public CustomTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
}

public CustomTextView(Context context) {
    super(context);
    init();
}

private void init() {
    if (!isInEditMode()) {
        Typeface typeFace = Typeface.createFromAsset(getContext().getAssets(), "fonts/arial.ttf");
        setTypeface(typeFace,Typeface.NORMAL);
    }
}

}

そして、assets/fonts/arial.ttfのフォント ファイルで、フォントの名前が CustomTextView Java ファイルと同じでなければならないことを確認してください。また、 xmlから CustomTextView を呼び出すには、次のコードを使用できます。

<com.package.name.CustomTextView
//fill in the details
/>

ありがとう

于 2014-07-11T06:18:57.073 に答える
0

これを試してもらえますか...パスに何か問題があると思いますパスを確認してください

def_list_tv = (TextView)findViewById(R.id.def_list_textview);
Typeface tf = Typeface.createFromAsset(this.getAssets(), "bn.ttf");
def_list_tv.setTypeface(tf,null);
于 2014-09-09T11:32:27.077 に答える
0

に注意する必要があり"fonts/bn.ttf"ます。すべての単語はプロトタイプでなければなりません。
ありbn.ttfますようにBN.TTFassetsそのため、フォルダに注意して、プロトタイプ名から確認してください。

于 2014-01-20T21:04:42.680 に答える
0

私は答えを見つけました。silwar が指摘したように、XML レイアウトのコンテンツ ビューを使用してアクティビティを割り当てていないため、コンテキストのためでした。コンテンツ ビューが異なる別のアクティビティを使用していました。

しかし、1つの質問があります。それでも、テキスト ビューは、指摘されたフォントを適用していないようです。デフォルトのフォントを使用するだけです。割り当てた書体を使用したいリスト ビュー用の XML レイアウトがあります。文字列を ArrayList に追加し、リスト ビューのアダプターは次のコードを使用します。

defListAdapter = new ArrayAdapter<String>(this, R.layout.def_list, list);
defListView.setAdapter(defListAdapter);

def_list は、以前の質問で指摘した XML レイアウトです。defListView はリスト ビューです。目的の書体が表示されないのはなぜですか?

于 2013-12-27T12:27:28.157 に答える