Android EditText на longPress: ArrayIndexOutOfBoundsException: length = 15; Индекс = 491

У меня такое странное поведение, которое я не могу объяснить. Мой макет довольно прост: EditText:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="10dp" >


        <EditText
            android:id="@+id/etPass"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

</LinearLayout>

Когда я пытаюсь использовать longPress (для вставки некоторого текста), я получил imediate Force Close и эту ошибку:

05-08 16:56:16.838: E/AndroidRuntime(12164): FATAL EXCEPTION: main
05-08 16:56:16.838: E/AndroidRuntime(12164): android.view.InflateException: Binary XML file line #17: Error inflating class <unknown>
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.createView(LayoutInflater.java:613)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$ActionPopupWindow.initContentView(Editor.java:2995)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$PinnedPopupWindow.<init>(Editor.java:2280)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$ActionPopupWindow.<init>(Editor.java:2968)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$ActionPopupWindow.<init>(Editor.java:2968)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$HandleView.showActionPopupWindow(Editor.java:3189)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$InsertionHandleView.showWithActionPopup(Editor.java:3416)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor$InsertionPointCursorController.showWithActionPopup(Editor.java:3652)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.Editor.performLongClick(Editor.java:870)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.TextView.performLongClick(TextView.java:7973)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.View$CheckForLongPress.run(View.java:17140)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.os.Handler.handleCallback(Handler.java:615)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.os.Handler.dispatchMessage(Handler.java:92)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.os.Looper.loop(Looper.java:213)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.app.ActivityThread.main(ActivityThread.java:4786)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Method.invokeNative(Native Method)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Method.invoke(Method.java:511)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at dalvik.system.NativeStart.main(Native Method)
05-08 16:56:16.838: E/AndroidRuntime(12164): Caused by: java.lang.reflect.InvocationTargetException
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Constructor.constructNative(Native Method)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.view.LayoutInflater.createView(LayoutInflater.java:587)
05-08 16:56:16.838: E/AndroidRuntime(12164):    ... 25 more
05-08 16:56:16.838: E/AndroidRuntime(12164): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=15; index=491
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.StringBlock.get(StringBlock.java:64)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.XmlBlock$Parser.getPooledString(XmlBlock.java:458)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.TypedArray.loadStringValueAt(TypedArray.java:720)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.content.res.TypedArray.getString(TypedArray.java:124)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.TextView.<init>(TextView.java:800)
05-08 16:56:16.838: E/AndroidRuntime(12164):    at android.widget.TextView.<init>(TextView.java:450)
05-08 16:56:16.838: E/AndroidRuntime(12164):    ... 28 more

Я действительно не знаю, что происходит, и я был бы рад получить помощь!

Чтобы быть ясным, у меня нет ничего в моей деятельности, связанной с прослушивателем этого EditText:

import android.app.Activity;
import android.os.Bundle;

public class ProActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_pro);

    }

}

Ответ 1

Просто удалите эту строку из своего пользовательского стиля

Эта единственная строка:

  <item name="android:fontFamily">sans-serif-light</item>

При длинном нажатии на него произойдет сбой EditText.

Всплывающее окно для копирования/вставки Android стало основной причиной ошибки.

Ответ 2

эта ссылка решила мою проблему, хотя автозаполнение в xml файлах не работало, но код в этом примере верен, я объявил все в одном файле стилей и работал:

https://github.com/rengwuxian/MaterialEditText/issues/162

и то, что было сказано в нем:

Кажется, это ошибка в стилях, проверьте, есть ли у вас

<item name="android:fontFamily"></item>

в теме приложения, а не в виде тем, в теме приложения. То же самое произошло со мной, пока я не удалил эту строку моего стиля .xml, если у вас есть эта строка, удалите их, если вам нужно это свойство, вы можете стилизовать текстовые изображения и кнопки с помощью

<style name="TextViewStyle" parent="android:Widget.TextView">
    <item name="android:fontFamily">sans-serif-medium</item>
</style>

<style name="ButtonStyle" parent="android:Widget.Holo.Button">
    <item name="android:fontFamily">sans-serif-medium</item>
</style>

В теме приложения используйте:

<item name="android:textViewStyle">@style/TextViewStyle</item>
<item name="android:buttonStyle">@style/ButtonStyle</item>

Ответ 3

Я также столкнулся с этой проблемой;

но причина этого в том, что я использую ContextThemeWrapper;

вот как мы получаем LayoutInflater из ContextThemeWrapper

@Override 
public Object getSystemService(String name) {
    if (LAYOUT_INFLATER_SERVICE.equals(name)) {
        if (mInflater == null) {
            mInflater = LayoutInflater.from(mBase).cloneInContext(this);
        }
        return mInflater;
    }
    return mBase.getSystemService(name);
}

из приведенного выше кода кода, мы видим, что он обрабатывает LayoutInflater специально, что является источником проблемы.

Мое решение: переопределить этот метод следующим образом

@Override
public Object getSystemService(String name){
    return getBaseContext().getSystemService(name);
}

Ответ 4

Я сталкиваюсь с этой проблемой при использовании <item name="android:fontFamily">sans-serif</item> в style.xml

Это CRASH on

  • Samsung S4 (SC-04E) (5.0.1)
  • Samsung Galaxy Node 5 (5.1.1)

Это НЕ

  • Samsung S7 Edge (SM-G935F) (7.0)
  • Xiaomi A2 (8.0.1)
  • Pixel XL (8.1.0)
  • Sony Xperia Z5 Au (SOV32) (6.0)
  • Стрелка NX (F-04G) (6.0.1)
  • Kyocera (S2) (7,0)

Сначала я думаю, что эта проблема случится только на Samsung но Samsung S7 не падает.

Тогда я думаю, что API может вызвать эту проблему, потому что текущее аварийное устройство имеет API <6.0. Однако я не уверен в этом, потому что у меня нет большого количества устройств для тестирования

Описание: В некоторых устройствах произойдет сбой

УСТАНОВИТЬ ЭТУ ПРОБЛЕМУ
Сначала удалите sans-serif
Затем скачайте шрифт Roboto с https://github.com/google/fonts/tree/master/apache/roboto, а затем добавьте в проект следующий https://developer.android.com/guide/topics/ui/look-and-feel/шрифты-в-XML

Почему шрифт Roboto?
Вы столкнулись с этой проблемой при правильном использовании шрифта sans-serif? sans-serif в Android - это шрифт Roboto (см. здесь шрифт Android по умолчанию)

Если вы знаете какое-то устройство, которое будет разбиваться, пожалуйста, отредактируйте мой ответ, это может помочь в тестировании.
Надеюсь, что это поможет