diff --git a/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXBaseTest.kt b/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXBaseTest.kt index 1bfbe1a01..21ef5dbc7 100644 --- a/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXBaseTest.kt +++ b/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXBaseTest.kt @@ -53,7 +53,6 @@ open class GXBaseTest { .registerExtensionColor(GXProcessorColor()) .registerExtensionSize(GXExtensionSize()) .registerExtensionDynamicProperty(GXExtensionDynamicProperty()) - .registerExtensionStaticProperty(GXExtensionStaticProperty()) .registerExtensionScroll(GXExtensionScroll()) } @@ -123,19 +122,6 @@ open class GXBaseTest { } } - class GXExtensionStaticProperty : GXRegisterCenter.GXIExtensionStaticProperty { - - override fun convert(params: GXRegisterCenter.GXIExtensionStaticProperty.GXParams): Any? { - if (params.propertyName == GXTemplateKey.STYLE_FONT_FAMILY && params.value == "unknow_fontfamily") { - return Typeface.createFromAsset( - context.assets, - "fontfamily3.ttf" - ) - } - return null - } - } - class GXExtensionSize : GXRegisterCenter.GXIExtensionSize { override fun create(value: String): Float? { Log.d(TAG, "createProcessing() called with: size = $value") diff --git a/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXCommonApiTest.kt b/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXCommonApiTest.kt index d573f3d78..72ab76ca3 100644 --- a/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXCommonApiTest.kt +++ b/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXCommonApiTest.kt @@ -1,6 +1,7 @@ package com.alibaba.gaiax import android.content.Context +import android.graphics.Typeface import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import com.alibaba.fastjson.JSONObject @@ -22,7 +23,17 @@ class GXCommonApiTest { } @Test - fun template_position_relative_left() { + fun template_font_family() { + GXRegisterCenter.instance.registerExtensionFontFamily(object : + GXRegisterCenter.GXIExtensionFontFamily { + override fun fontFamily(fontFamilyName: String): Typeface? { + return Typeface.createFromAsset(GXMockUtils.context.assets, fontFamilyName) + } + }) + } + + @Test + fun template_bind_data_measure_size() { val templateItem = GXTemplateEngine.GXTemplateItem( GXMockUtils.context, "api", diff --git a/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXComponentTextTest.kt b/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXComponentTextTest.kt index 60733df16..b9028a466 100644 --- a/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXComponentTextTest.kt +++ b/GaiaXAndroid/src/androidTest/java/com/alibaba/gaiax/GXComponentTextTest.kt @@ -2,6 +2,7 @@ package com.alibaba.gaiax import android.graphics.Color import android.graphics.Paint +import android.graphics.Typeface import android.text.TextUtils import android.util.Log import android.view.Gravity @@ -147,6 +148,19 @@ class GXComponentTextTest : GXBaseTest() { @Test fun template_text_processor_font_family() { + GXRegisterCenter.instance.registerExtensionStaticProperty(object : + GXRegisterCenter.GXIExtensionStaticProperty { + override fun convert(params: GXRegisterCenter.GXIExtensionStaticProperty.GXParams): Any? { + if (params.propertyName == GXTemplateKey.STYLE_FONT_FAMILY && params.value == "unknow_fontfamily") { + return Typeface.createFromAsset( + GXMockUtils.context.assets, + "fontfamily3.ttf" + ) + } + return null + } + }) + val templateItem = GXTemplateEngine.GXTemplateItem( GXMockUtils.context, "text", @@ -467,6 +481,19 @@ class GXComponentTextTest : GXBaseTest() { @Test fun template_text_property_font_family() { + GXRegisterCenter.instance.registerExtensionStaticProperty(object : + GXRegisterCenter.GXIExtensionStaticProperty { + override fun convert(params: GXRegisterCenter.GXIExtensionStaticProperty.GXParams): Any? { + if (params.propertyName == GXTemplateKey.STYLE_FONT_FAMILY) { + return Typeface.createFromAsset( + GXMockUtils.context.assets, + "${params.value}.ttf" + ) + } + return null + } + }) + val templateItem = GXTemplateEngine.GXTemplateItem( GXMockUtils.context, "text", @@ -1090,7 +1117,10 @@ class GXComponentTextTest : GXBaseTest() { ) textView.measure(widthSpec, 0) - Log.e("[GaiaX]", "textView.measuredWidth=${textView.measuredWidth.toFloat()} textView.measuredHeight=${textView.measuredHeight.toFloat()}") + Log.e( + "[GaiaX]", + "textView.measuredWidth=${textView.measuredWidth.toFloat()} textView.measuredHeight=${textView.measuredHeight.toFloat()}" + ) Assert.assertEquals(textView.measuredWidth.toFloat(), rootView.child(0).width()) Assert.assertEquals(textView.measuredHeight.toFloat(), rootView.child(0).height()) diff --git a/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/GXRegisterCenter.kt b/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/GXRegisterCenter.kt index 59bb425a4..9f2399592 100644 --- a/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/GXRegisterCenter.kt +++ b/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/GXRegisterCenter.kt @@ -16,6 +16,7 @@ package com.alibaba.gaiax +import android.graphics.Typeface import android.view.ViewGroup import com.alibaba.fastjson.JSONArray import com.alibaba.fastjson.JSONObject @@ -129,6 +130,23 @@ class GXRegisterCenter { fun convert(params: GXParams): Any? } + /** + * Load Typeface + * Basic usage: + * ``` + * GXRegisterCenter.instance.registerExtensionFontFamily(object : + * GXRegisterCenter.GXIExtensionFontFamily { + * override fun fontFamily(fontFamilyName: String): Typeface? { + * return Typeface.createFromAsset(GXMockUtils.context.assets, fontFamilyName) + * } + * }) + * ``` + */ + interface GXIExtensionFontFamily { + + fun fontFamily(fontFamilyName: String): Typeface? + } + interface GXIExtensionBizMap { fun convert(item: GXTemplateEngine.GXTemplateItem) } @@ -315,6 +333,18 @@ class GXRegisterCenter { return this } + fun registerExtensionFontFamily(extensionFontFamily: GXIExtensionFontFamily): GXRegisterCenter { + this.extensionStaticProperty = object : GXIExtensionStaticProperty { + override fun convert(params: GXIExtensionStaticProperty.GXParams): Any? { + if (params.propertyName == GXTemplateKey.STYLE_FONT_FAMILY) { + return extensionFontFamily.fontFamily(params.value as String) + } + return null + } + } + return this + } + fun reset() { extensionNodeEvent = null extensionCompatibility = null diff --git a/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/template/GXStyleConvert.kt b/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/template/GXStyleConvert.kt index ccea78c50..c47be1772 100644 --- a/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/template/GXStyleConvert.kt +++ b/GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/template/GXStyleConvert.kt @@ -171,27 +171,20 @@ class GXStyleConvert { } fun fontFamily(fontFamily: String): Typeface? { - try { - // extend - GXRegisterCenter - .instance - .extensionStaticProperty - ?.convert( - GXRegisterCenter.GXIExtensionStaticProperty.GXParams( - GXTemplateKey.STYLE_FONT_FAMILY, - fontFamily - ) + // extend + GXRegisterCenter + .instance + .extensionStaticProperty + ?.convert( + GXRegisterCenter.GXIExtensionStaticProperty.GXParams( + GXTemplateKey.STYLE_FONT_FAMILY, + fontFamily ) - ?.let { - (it as? Typeface)?.let { return it } - } - - // src - return Typeface.createFromAsset(assets, "$fontFamily.ttf") - } catch (e: Exception) { - e.printStackTrace() - return null - } + ) + ?.let { + (it as? Typeface)?.let { return it } + } + return null } fun font(css: JSONObject): GXSize? =