Skip to content

[TNS 3.0] Android: Formatted string does not work if defined in XML #4109

@PeterStaev

Description

@PeterStaev

I have the following defined in XML that was working with 2.5:

<Button class="btn">   
    <Button.formattedText>
        <FormattedString>
            <FormattedString.spans>
                <Span text=" Login"></Span>
            </FormattedString.spans>
        </FormattedString>
    </Button.formattedText>
</Button>  

This throws the following error:

An uncaught Exception occurred on "main" thread.
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Typeface.getStyle()' on a null object reference
at org.nativescript.widgets.CustomTypefaceSpan.applyCustomTypeFace(CustomTypefaceSpan.java:35)
at org.nativescript.widgets.CustomTypefaceSpan.updateDrawState(CustomTypefaceSpan.java:23)
at android.text.TextLine.handleRun(TextLine.java:932)
at android.text.TextLine.measureRun(TextLine.java:417)
at android.text.TextLine.measure(TextLine.java:296)
at android.text.TextLine.metrics(TextLine.java:270)
at android.text.BoringLayout.isBoring(BoringLayout.java:311)
at android.widget.TextView.makeSingleLayout(TextView.java:6715)
at android.widget.TextView.makeNewLayout(TextView.java:6610)
at android.widget.TextView.onMeasure(TextView.java:6961)
at android.view.View.measure(View.java:18788)
at org.nativescript.widgets.CommonLayoutParams.measureChild(CommonLayoutParams.java:262)
at org.nativescript.widgets.StackLayout.onMeasure(StackLayout.java:83)
at android.view.View.measure(View.java:18788)
at org.nativescript.widgets.CommonLayoutParams.measureChild(CommonLayoutParams.java:262)
at org.nativescript.widgets.StackLayout.onMeasure(StackLayout.java:83)
at android.view.View.measure(View.java:18788)
at org.nativescript.widgets.CommonLayoutParams.measureChild(CommonLayoutParams.java:262)
at org.nativescript.widgets.MeasureHelper.measureChildFixedColumnsAndRows(GridLayout.java:1059)
at org.nativescript.widgets.MeasureHelper.measure(GridLayout.java:869)
at org.nativescript.widgets.GridLayout.onMeasure(GridLayout.java:279)
at android.view.View.measure(View.java:18788)
at org.nativescript.widgets.CommonLayoutParams.measureChild(CommonLayoutParams.java:262)
at org.nativescript.widgets.ContentLayout.onMeasure(ContentLayout.java:32)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
at android.view.View.measure(View.java:18788)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Also tried the short format - directly having FormattedString inside the button and then directly Span inside it. Also the same problem happens with Label. Before testing I have uninstalled the app from device and nuked node_modules and platforms.

EDIT
Seems related to the btn class from the nativescript theme. If that is removed the exception does not happen.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions