2016-09-16 37 views
1

我试图在我的应用程序中添加自定义字体。创建typeface对象并在其中放置字体的方法起作用。现在我想为自定义字体制作一个更清晰的代码。Android应用程序的自定义字体

CustomFont.java

public class CustomFont extends AppCompatActivity { 

    private final Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Slabo.ttf"); 

    public CustomFont(TextView textView) { 
     textView.setTypeface(typeface); 
    } 
} 

,现在我想这种字体添加到textview

public class MainActivity extends AppCompatActivity { 

    private Typeface typeface; 
    private CustomFont customFont; 
    private TextView textview; 

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

     //typeface = Typeface.createFromAsset(getAssets(), "fonts/Slabo.ttf"); // works 
     textview = (TextView) findViewById(R.id.textviewTest); 
     //textview.setTypeface(typeface); // works 

     customFont = new CustomFont(textview); // does not work 

    } 
} 

,但如果我跑这个项目,我得到这个异常:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content.Context.getAssets()' on a null object reference 

回答

0

首先CustomFont不应该是activity.It应该是正常的类。

public class CustomFont { 

    private Typeface typeface; 
    public CustomFont(Context context) { 
     typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Slabo.ttf"); 
    } 
    public void setFont(TextView textView) { 
     textView.setTypeface(typeface); 
    } 
} 

从你MainActivity

customFont = new CustomFont(this); 
customFont.setFont(textview); 
+0

谢谢你这个作品! :) 你是最棒的! –

1

试试这个:

TextView text = (TextView) findViewById(R.id.custom_font); 
Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf"); 
text.setTypeface(font); 
+0

我知道它的工作原理,但我想这在一个单独的类 –

1

你可以像下面的方法在您的commonUtill类更好的澄清

public static void setTypeface(Context mContext, View view, VIEW_TYPE type, 
            TYPE_FACE face, int bold) { 
     View mView = view; 
     Typeface tface = getTypeface(mContext, face); 
     switch (type) { 
      case TEXTVIEW: 
       ((TextView) mView).setTypeface(tface, bold); 
       break; 
      case BUTTON: 
       ((Button) mView).setTypeface(tface, bold); 
       break; 
      case EDITTEXT: 
       ((EditText) mView).setTypeface(tface, bold); 
       break; 
      case RADIOBUTTON: 
       ((RadioButton) mView).setTypeface(tface, bold); 
       break; 
      case CHECKBOX: 
       ((CheckBox) mView).setTypeface(tface, bold); 
       break; 
      case CHECKEDTEXTVIEW: 
       ((CheckedTextView) mView).setTypeface(tface, bold); 
       break; 
      default: 
       break; 
     } 

    } 

像这样

public static enum TYPE_FACE { 
     CALIBRI, ICON_FONT, BEBAS, AWESOME, BT, TAGLINE, 
     CALLIBRI, WEBLYSLEEK, WEBLYSLEEK_BOLD, ICON_FONT1 

    } 

和你的观点方法来创建功能。

public static enum VIEW_TYPE { 
     TEXTVIEW, BUTTON, EDITTEXT, RADIOBUTTON, CHECKBOX, CHECKEDTEXTVIEW 
    } 

通过这种方式,你可以很容易地管理你的代码。

0

创建Java类这样的..

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

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

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

    public void init() { 
     Typeface tf = Typeface.createFromAsset(getContext().getAssets(), 
       "fonts/Karla-Bold.ttf"); 
     setTypeface(tf, 1); 
    } 
} 

使用这个类作为观XML

<hammerapps.views.TextViewKarlaBold // hammerapps.views is My Package name 
       android:id="@+id/txtVIEW" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:gravity="center" 
       android:text="VIEW" 
       android:textColor="@color/black" 
       android:textSize="12dp" /> 
0

使用这个库,如果你想在一个特定的字体你的整个应用 Check here

0
Use Custom Textview 

public class TextView extends android.widget.TextView { 
Context mContext; 
String str; 
boolean isCorner; 
//fonts 
public static Typeface Font_name; 

public TextView(Context context) { 
    super(context); 
    mContext=context; 
    initialiseFont(null); 
} 





public TextView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    mContext=context; 
    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TextView, 0, 0); 
    try { 
     str = ta.getString(R.styleable.TextView_font_family); 
     isCorner=ta.getBoolean(R.styleable.TextView_isCorner,false); 
    } finally { 
     ta.recycle(); 
    } 
    initialiseFont(str); 
} 


private void initialiseFont(String font) { 

    if(font==null || font.equals("")){ 

    } 
    else { 

      Font_name = Typeface.createFromAsset(mContext.getAssets(), "DroidSansFallbackanmol256.ttf"); 
      setTypeface(Font_name); 

} 

}

使用attrs.xml称之为

<declare-styleable name="TextView"> 
    <attr name="font_family" format="string"/> 
    <attr name="isCorner" format="boolean"/> 
</declare-styleable> 
相关问题