Java.Lang.nosuchmetoderror: ‘нет нестатического метода «Landroid/widget/TextView;.setJustificationMode (I)V»‘

#c# #xaml #xamarin.forms

#c# #xaml #xamarin.forms

Вопрос:

Я использовал пользовательский рендеринг для сортировки текста, но он не работает на некоторых устройствах и выдает эту ошибку:

Java.Lang.nosuchmetoderror: ‘нет нестатического метода «Landroid/widget/TextView;.setJustificationMode (I)V»‘

Спасибо, если кто-нибудь поможет.

Это мой код:

 

[assembly: ExportRenderer(typeof(CustomLabel), typeof(CustomLabelRender))]


namespace customlabel.Droid


{


    public class CustomLabelRender : LabelRenderer


    {
        public CustomLabelRender(Context context) : base(context)
        {

        }


        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                Control.JustificationMode = JustificationMode.InterWord;
            }
        }


    }


}
 

Комментарии:

1. Привет, какая целевая платформа для Android используется в вашем проекте? i.stack.imgur.com/ekQZR.png

2. Спасибо за ваш ответ, моя целевая платформа — 11. Но когда я пробую это на Android 7, мое приложение вылетает!

3. Хорошо, если это так, ответ pinedax должен сработать для вас. Не могли бы вы подробнее объяснить, почему это не работает для вас?

4. Я не знаю, когда я использую код pinedax, мое приложение снова вылетает.

5. Спасибо за ваши советы! @ Junior Jiang — MSFT

Ответ №1:

Я попробовал следующий код, и он работает на моем локальном сайте:

 public class CustomLabelRenderer: LabelRenderer
{
    public CustomLabelRenderer(Context context) : base(context)
    {

    }


    protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
    {
        base.OnElementChanged(e);

        if (Xamarin.Essentials.DeviceInfo.Version.Major >= 8)
        {
            if (Control != null)
            {
                Control.SetBackgroundColor(Android.Graphics.Color.AliceBlue);
                Control.JustificationMode = JustificationMode.InterWord;
            }
        }
        else
        {
            if (Control != null)
            {
                Control.SetBackgroundColor(Android.Graphics.Color.Red);
                Control.TextAlignment = Android.Views.TextAlignment.Center;
            }
        }
    }
}
 

Эффект на устройстве Android 9.0:

введите описание изображения здесь

Влияние на устройство Android 7.0:

введите описание изображения здесь

Ответ №2:

Ошибка заключается в том, что этот метод был впервые представлен на Android в версии API 26, что означает, что на устройствах с более старыми версиями Android он приведет к сбою.

Дополнительная информация здесь: https://developer.android.com/reference/android/widget/TextView#setJustificationMode (int)

Вы все равно можете использовать его, но вам нужно будет проверить версию ОС перед ее вызовом. Если вы уже используете Xamarin.Основы (я думаю, вы) вы можете сделать что-то вроде этого:

 //Version 8.0 is API 26 (https://source.android.com/setup/start/build-numbers)

if (Xamarin.Essentials.DeviceInfo.Version.Major >= 8)
{
    if (Control != null)
    {
        Control.JustificationMode = JustificationMode.InterWord;
    }
}
 

Примечание: проверка только предотвратит сбой, но это означает, что вы не будете поддерживать устройства с ОС <8.0 (26).

Надеюсь, это поможет.-

Комментарии:

1. У меня это не сработало. Есть ли другой способ организовать мои тексты для работы со всеми версиями?