Few things before we start off:
- Not all fonts are compatible with Android
- You need to package the ttf files with your apk
- It's obviously a little bit of extra work
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.beanie.samples.customfont.MyTextViewIn both these classes, we have a method called init() which is called from all the constructors. The method is just 3 line long.
android:layout_marginTop="10dip" android:id="@+id/textView"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/hello" android:textSize="20sp"></com.beanie.samples.customfont.MyTextView>
<com.beanie.samples.customfont.MyButton
android:layout_marginTop="10dip" android:id="@+id/textView"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="@string/hello" android:textSize="20sp"></com.beanie.samples.customfont.MyButton>
</LinearLayout>
if (!isInEditMode()) {Simple!!! You might notice that there is an if condition. This is not required, but it does help when you are preparing your layouts on eclipse, and you need to keep checking if everything's fine. This method, isInEditMode() returns true while eclipses tries to render the view from the XML.
Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/ds_digib.ttf");
setTypeface(tf);
}
This is what the documentation says:
Indicates whether this View is currently in edit mode. A View is usually in edit mode when displayed within a developer tool. For instance, if this View is being drawn by a visual user interface builder, this method should return true. Subclasses should check the return value of this method to provide different behaviors if their normal behavior might interfere with the host environment. For instance: the class spawns a thread in its constructor, the drawing code relies on device-specific features, etc. This method is usually checked in the drawing code of custom widgets.If you don't put this condition, the layout editor will complain about not being able to set the TypeFace. So, in the layout editor, you will see your TextView and Button widgets with the default font. But, when you run your app on an emulator or a device, you can see the goodness of your custom fonts.
The source code for the sample project can be found here. You can find 3 different fonts (ttf file) in the assets folder to play with.