2015-10-13 77 views
-1

我正在用fontawesome創建一個示例項目,我似乎無法解決錯誤。我正在關注這個tutorial。該錯誤告訴我,我無法使用管理器中的視圖。 錯誤是:Android App Font Awesome

'markAsIconContainer(android.view.View, android.graphics.Typeface)' in 'com.example.fadil.fontawesome.FontManager' cannot be applied to '(android.view.View)' 

這裏是代碼:

MainActivity:

import android.graphics.Typeface; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Typeface iconFont = FontManager.getTypeface(getApplicationContext(), FontManager.FONTAWESOME); 
     FontManager.markAsIconContainer(findViewById(R.id.icons_container), iconFont); 
    } 
} 

FontManager:

import android.content.Context; 
import android.graphics.Typeface; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

public class FontManager { 

    public static final String ROOT = "fonts/", 
      FONTAWESOME = ROOT + "fontawesome-webfont.ttf"; 

    public static Typeface getTypeface(Context context, String font) { 
     return Typeface.createFromAsset(context.getAssets(), font); 
    } 

    public static void markAsIconContainer(View v, Typeface typeface) { 
     if (v instanceof ViewGroup) { 
      ViewGroup vg = (ViewGroup) v; 
      for (int i = 0; i < vg.getChildCount(); i++) { 
       View child = vg.getChildAt(i); 
       markAsIconContainer(child); 
      } 
     } else if (v instanceof TextView) { 
      ((TextView) v).setTypeface(typeface); 
     } 
    } 

} 

activity_main佈局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/icons_container" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity"> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1" 
     android:textSize="30sp" 
     android:text="@string/fa_icon_areachart" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1" 
     android:textSize="30sp" 
     android:text="@string/fa_icon_piechart" /> 

    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1" 
     android:textSize="30sp" 
     android:text="@string/fa_icon_linechart" /> 
</LinearLayout> 

的logcat:

10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime: FATAL EXCEPTION: main 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime: Process: com.example.fadil.fontawesome, PID: 20432 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.fadil.fontawesome/com.example.fadil.fontawesome.MainActivity}: java.lang.RuntimeException: native typeface cannot be made 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2200) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2249) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.access$800(ActivityThread.java:141) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:136) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5113) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:515) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime: Caused by: java.lang.RuntimeException: native typeface cannot be made 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.graphics.Typeface.<init>(Typeface.java:175) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.graphics.Typeface.createFromAsset(Typeface.java:149) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at com.example.fadil.fontawesome.FontManager.getTypeface(FontManager.java:18) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at com.example.fadil.fontawesome.MainActivity.onCreate(MainActivity.java:14) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.Activity.performCreate(Activity.java:5248) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2164) 
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2249)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.access$800(ActivityThread.java:141)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1212)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:136)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5113)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:515)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:609)  
10-13 12:31:19.155 20432-20432/com.example.fadil.fontawesome E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 

需要幫助:)

回答

3

得到的答案...

我不得不改變TTF文件位置的主目錄,而不是SRC ,併爲markAsIconContainer添加字體到括號中。

這裏是固定的代碼:

public static void markAsIconContainer(View v, Typeface typeface) { 
     if (v instanceof ViewGroup) { 
      ViewGroup vg = (ViewGroup) v; 
      for (int i = 0; i < vg.getChildCount(); i++) { 
       View child = vg.getChildAt(i); 
       markAsIconContainer(child, typeface); 
      } 
     } else if (v instanceof TextView) { 
      ((TextView) v).setTypeface(typeface); 
     } 
    } 

} 

:)

+0

感謝分享,它的工作:) – Woppi