Пользовательская клавиатура не работает на Android P Beta

Когда я пытаюсь использовать пользовательскую клавиатуру, возникает исключение на Android P Beta, все работает нормально до Android Oreo, но недавно произошел сбой. Просто попробуйте выяснить, какой класс может быть ответственным за исключение. В настоящее время невозможно получить доступ к полному коду пользовательской клавиатуры, поэтому код не публикуется.

java.lang.IllegalArgumentException: Invalid Region.Op - only INTERSECT and DIFFERENCE are allowed
    at android.graphics.Canvas.checkValidClipOp(Canvas.java:779)
    at android.graphics.Canvas.clipRect(Canvas.java:826)
    at android.inputmethodservice.KeyboardView.onBufferDraw(KeyboardView.java:666)
    at android.inputmethodservice.KeyboardView.onDraw(KeyboardView.java:647)
    at android.view.View.draw(View.java:20205)
    at android.view.View.updateDisplayListIfDirty(View.java:19080)
    at android.view.View.draw(View.java:19933)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw(View.java:20208)
    at android.view.View.updateDisplayListIfDirty(View.java:19080)
    at android.view.View.draw(View.java:19933)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.updateDisplayListIfDirty(View.java:19071)
    at android.view.View.draw(View.java:19933)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.updateDisplayListIfDirty(View.java:19071)
    at android.view.View.draw(View.java:19933)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.updateDisplayListIfDirty(View.java:19071)
    at android.view.View.draw(View.java:19933)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.updateDisplayListIfDirty(View.java:19071)
    at android.view.View.draw(View.java:19933)
    at android.view.ViewGroup.drawChild(ViewGroup.java:4333)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4112)
    at android.view.View.draw(View.java:20208)
    at com.android.internal.policy.DecorView.draw(DecorView.java:784)
    at android.view.View.updateDisplayListIfDirty(View.java:19080)
    at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:685)
    at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:691)
    at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:799)
    at android.view.ViewRootImpl.draw(ViewRootImpl.java:3259)
    at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3075)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2455)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1443)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7125)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:935)
    at android.view.Choreographer.doCallbacks(Choreographer.java:747)
    at android.view.Choreographer.doFrame(Choreographer.java:682)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:921)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:164)
    at android.app.ActivityThread.main(ActivityThread.java:6649)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:826)

person Nikhil    schedule 16.05.2018    source источник
comment
Вы уверены, что это хорошая идея решить эту проблему в бета-версии?   -  person firegloves    schedule 16.05.2018
comment
Да, потому что, если та же проблема не исчезнет во время выпуска окончательной версии Android P, это приведет к огромным потерям приложения.   -  person Nikhil    schedule 17.05.2018
comment
@nikhil ты нашел какие-нибудь решения?   -  person nivritgupta    schedule 19.07.2018
comment
@nivritgupta В финальной версии Android P все работает без проблем, проверено на Nokia 7 Plus Android 9.0.   -  person Nikhil    schedule 23.11.2018


Ответы (2)


Это на самом деле говорит вам причину:

разрешены только ПЕРЕСЕЧЕНИЕ и РАЗНИЦА

Причина написана здесь:

Этот метод устарел на уровне API 26. Значения Region.Op, отличные от INTERSECT и DIFFERENCE, позволяют расширить клип. API отсечения холста предназначены только для расширения клипа в результате операции восстановления. Это позволяет родительскому виду обрезать холст, чтобы четко определить максимальную область рисования его дочерних элементов. Рекомендуемые альтернативные вызовы: clipRect(RectF) и clipOutRect(RectF); Начиная с уровня API уровня API Build.VERSION_CODES.P, допустимыми параметрами Region.Op являются только INTERSECT и DIFFERENCE.

Таким образом, вы либо должны использовать более низкую версию targetSdk (чего вам не следует, потому что Google заставит вас использовать как минимум 26 ее к концу года), либо вы исправляете это, используя отсечение через холст другим способом. .

Я задал вопрос об этом здесь о том, какая альтернатива.

person android developer    schedule 21.05.2018
comment
Я также сталкиваюсь с той же проблемой с другой библиотекой с именем Android Week view, пожалуйста, проверьте эту ссылку github.com/alamkanak/Android-Week-View/issues/511. моя проблема в том, что когда я компилирую приложение с более новой версией, оно вылетает только на устройстве, а не в эмуляторе, и та же функция календаря отлично работает на P с той же библиотекой, если я загружаю сборку, которую я отправил с 1,5 месяца назад, любая идея - person nivritgupta; 19.07.2018
comment
@nivritgupta Это та же библиотека, с которой я работал. Он больше не разрабатывается, и единственный форк, который я видел, который имеет некоторые обновления, это: github.com/Quivr/Android-Week-View , но и там много проблем. Итак, я разветвил его (это: github.com/Quachero/Android-Week- View ), сильно изменил его и попутно устранил эту проблему. Вот моя вилка (вилка, вилка): github.com/AndroidDeveloperLB/Android-Week -Просмотр . Вот мой запрос на включение: github.com/Quivr/Android-Week-View/pull /97 показывает многое из того, что я сделал. - person android developer; 19.07.2018
comment
вы преобразовали всю эту библиотеку в kotlin, что удивительно, в настоящее время я проверяю демо-приложение, если все идет хорошо, я буду использовать вашу библиотеку в своем проекте. У меня есть последний вопрос, могу ли я использовать вашу библиотеку kotlin в моем проекте Java? - person nivritgupta; 19.07.2018
comment
@nivritgupta Конечно. И, пожалуйста, подумайте о том, чтобы внести свой вклад. В настоящее время я заметил 2 проблемы, которые я еще не исправил: поддержка RTL (это означает, что все будет в противоположном направлении для таких языков, как иврит и арабский), медленная работа на старых устройствах по сравнению с приложением Google Календарь (возможно, из-за большого количества Экземпляры календаря). - person android developer; 19.07.2018

вам просто нужно удалить эту строку:

.setCropShape(CropImageView.CropShape.OVAL)
person Mohd Nashirudden    schedule 09.01.2019