Allow setting a default font file extension (#2166)
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
index 6d6cd45..037b6f9 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieAnimationView.java
@@ -179,6 +179,10 @@
setClipToCompositionBounds(ta.getBoolean(R.styleable.LottieAnimationView_lottie_clipToCompositionBounds, true));
}
+ if (ta.hasValue(R.styleable.LottieAnimationView_lottie_defaultFontFileExtension)) {
+ setDefaultFontFileExtension(ta.getString(R.styleable.LottieAnimationView_lottie_defaultFontFileExtension));
+ }
+
setImageAssetsFolder(ta.getString(R.styleable.LottieAnimationView_lottie_imageAssetsFolder));
setProgress(ta.getFloat(R.styleable.LottieAnimationView_lottie_progress, 0));
enableMergePathsForKitKatAndAbove(ta.getBoolean(
@@ -898,6 +902,21 @@
}
/**
+ * By default, Lottie will look in src/assets/fonts/FONT_NAME.ttf
+ * where FONT_NAME is the fFamily specified in your Lottie file.
+ * If your fonts have a different extension, you can override the
+ * default here.
+ *
+ * Alternatively, you can use {@link #setFontAssetDelegate(FontAssetDelegate)}
+ * for more control.
+ *
+ * @see #setFontAssetDelegate(FontAssetDelegate)
+ */
+ public void setDefaultFontFileExtension(String extension) {
+ lottieDrawable.setDefaultFontFileExtension(extension);
+ }
+
+ /**
* Use this to manually set fonts.
*/
public void setFontAssetDelegate(FontAssetDelegate assetDelegate) {
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
index ac5d92b..003fe44 100644
--- a/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
+++ b/lottie/src/main/java/com/airbnb/lottie/LottieDrawable.java
@@ -106,6 +106,12 @@
private ImageAssetDelegate imageAssetDelegate;
@Nullable
private FontAssetManager fontAssetManager;
+ /**
+ * Will be set if manually overridden by {@link #setDefaultFontFileExtension(String)}.
+ * This must be stored as a field in case it is set before the font asset delegate
+ * has been created.
+ */
+ @Nullable String defaultFontFileExtension;
@Nullable
FontAssetDelegate fontAssetDelegate;
@Nullable
@@ -1262,11 +1268,34 @@
if (fontAssetManager == null) {
fontAssetManager = new FontAssetManager(getCallback(), fontAssetDelegate);
+ String defaultExtension = this.defaultFontFileExtension;
+ if (defaultExtension != null) {
+ fontAssetManager.setDefaultFontFileExtension(defaultFontFileExtension);
+ }
}
return fontAssetManager;
}
+ /**
+ * By default, Lottie will look in src/assets/fonts/FONT_NAME.ttf
+ * where FONT_NAME is the fFamily specified in your Lottie file.
+ * If your fonts have a different extension, you can override the
+ * default here.
+ *
+ * Alternatively, you can use {@link #setFontAssetDelegate(FontAssetDelegate)}
+ * for more control.
+ *
+ * @see #setFontAssetDelegate(FontAssetDelegate)
+ */
+ public void setDefaultFontFileExtension(String extension) {
+ defaultFontFileExtension = extension;
+ FontAssetManager fam = getFontAssetManager();
+ if (fam != null) {
+ fam.setDefaultFontFileExtension(extension);
+ }
+ }
+
@Nullable
private Context getContext() {
Callback callback = getCallback();
diff --git a/lottie/src/main/res/values/attrs.xml b/lottie/src/main/res/values/attrs.xml
index 024c323..9fa016e 100644
--- a/lottie/src/main/res/values/attrs.xml
+++ b/lottie/src/main/res/values/attrs.xml
@@ -22,6 +22,8 @@
<attr name="lottie_cacheComposition" format="boolean" />
<attr name="lottie_ignoreDisabledSystemAnimations" format="boolean" />
<attr name="lottie_clipToCompositionBounds" format="boolean" />
+ <!-- The default file extension that Lottie will use when finding fonts in assets/fonts/fontFamily.* -->
+ <attr name="lottie_defaultFontFileExtension" format="string" />
<!-- These values must be kept in sync with the RenderMode enum -->
<attr name="lottie_renderMode" format="enum">
<enum name="automatic" value="0" />