【问题标题】:Xamarin.Forms app crashes when selecting text from custom label on Android从 Android 上的自定义标签中选择文本时,Xamarin.Forms 应用程序崩溃
【发布时间】:2020-12-19 13:01:37
【问题描述】:

我在 Xamarin.Forms 中创建了一个应用,然后创建了一个带有自定义渲染器的用于 android 的自定义标签。渲染器的工作是使标签文本可选择。它有效,标签文本现在是可选的。问题是,虽然它与常规标签完美配合,但当我尝试在包含希伯来语和英语(RTL 和 LTR)文本的标签中选择文本时,应用程序崩溃并出现此错误: Java.Lang.ArrayIndexOutOfBoundsException: 'length=35; index=35'(索引和长度因崩溃而异,但始终彼此相等)。

我在网上寻找解决方案但找不到...我还尝试了渲染器的其他实现,它们都有相同的错误。 (我认为这可能是 Android/Xamarin 的问题) 有人可以帮我吗?

渲染器代码:

class CustomLabelRenderer : LabelRenderer
{
    public CustomLabelRenderer(Context context) : base(context) {}
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
            base.OnElementChanged(e);
            Control.SetTextIsSelectable(true);
    }
}

(自定义标签(SELabel)没有代码,它只是继承自常规标签)

设备日志: Log.txt

【问题讨论】:

  • 错误可能是某些语言使用超过一个字节来表示一个字符。很抱歉,我无法提供更多帮助。

标签: java c# android .net xamarin.forms


【解决方案1】:

我使用谷歌翻译“欢迎使用 Xamarin.Forms”到希伯来语“ברוך הבא ל - Xamarin.Forms.”。并制作一个代码示例以在我这边进行测试。它运作良好。请检查我的代码。

标签:

public class SELabel:Label
{
}

自定义标签渲染器:

[assembly: ExportRenderer(typeof(SELabel), typeof(CustomLabelRenderer))]
namespace SelectableLabel.Droid
{
public class CustomLabelRenderer : LabelRenderer
{
    public CustomLabelRenderer(Context context) : base(context)
    {

    }
    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);
        Control.SetTextIsSelectable(true);
    }
}
}

用法:

 <StackLayout>
    <!--  Place new controls here  -->
    <local:SELabel
        HorizontalOptions="Center"
        Text="Welcome to Xamarin.Forms! Hebrew: ברוך הבא ל - Xamarin.Forms."
        VerticalOptions="CenterAndExpand" />
</StackLayout>

截图:

您可以从 GitHub 下载源文件以供参考。 https://github.com/WendyZang/Test/tree/master/SelectableLabel

【讨论】:

  • 谢谢你,这正是我所做的......你能试试这个文字,看看它是否崩溃了:“אגרתתראתאתיחתחתיתאית\ nםים\ nםיםםיתתית - קיוד - קישור\ n(handasaim.co.il/2017/06/12/…)\n"(尝试选择链接)
  • 我测试您提供的文本。它在我这边效果很好。请检查屏幕截图。 imgur.com/YVkUn5i你可以用我的项目测试文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-27
相关资源
最近更新 更多