Не може да изобрази MaterialButton с android.material:1.1.x

Всеки път, когато използвам MaterialButton, получавам следното изключение в xml визуализацията:

java.lang.IllegalArgumentException: java.lang.ClassCastException

Надстроих до android studio 3.4 и до com.google.android.material:material:1.1.0-alpha05

Версия 1.0.0 работи, но всяка 1.1.x не.

Това проблем с IDE или библиотеката ли е?

-

За справка, пълното проследяване на стека:

java.lang.ClassCastException@d8dc5d1
    at sun.reflect.GeneratedMethodAccessor893.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at android.animation.PropertyValuesHolder_Delegate.callMethod(PropertyValuesHolder_Delegate.java:108)
    at android.animation.PropertyValuesHolder_Delegate.nCallFloatMethod(PropertyValuesHolder_Delegate.java:143)
    at android.animation.PropertyValuesHolder.nCallFloatMethod(PropertyValuesHolder.java)
    at android.animation.PropertyValuesHolder.access$400(PropertyValuesHolder.java:38)
    at android.animation.PropertyValuesHolder$FloatPropertyValuesHolder.setAnimatedValue(PropertyValuesHolder.java:1387)
    at android.animation.ObjectAnimator.animateValue(ObjectAnimator.java:990)
    at android.animation.ValueAnimator.animateBasedOnTime(ValueAnimator.java:1339)
    at android.animation.ValueAnimator.doAnimationFrame(ValueAnimator.java:1471)
    at android.animation.ValueAnimator.pulseAnimationFrame(ValueAnimator.java:1490)
    at android.animation.AnimatorSet.pulseFrame(AnimatorSet.java:1163)
    at android.animation.AnimatorSet.handleAnimationEvents(AnimatorSet.java:1146)
    at android.animation.AnimatorSet.doAnimationFrame(AnimatorSet.java:1046)
    at android.animation.AnimationHandler.doAnimationFrame(AnimationHandler.java:146)
    at android.animation.AnimationHandler.access$100(AnimationHandler.java:37)
    at android.animation.AnimationHandler$1.doFrame(AnimationHandler.java:54)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:947)
    at android.view.Choreographer.doCallbacks(Choreographer.java:761)
    at android.view.Choreographer_Delegate.doFrame(Choreographer_Delegate.java:66)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.renderAndBuildResult(RenderSessionImpl.java:563)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:425)
    at com.android.layoutlib.bridge.BridgeRenderSession.render(BridgeRenderSession.java:120)
    at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:151)
    at com.android.ide.common.rendering.api.RenderSession.render(RenderSession.java:133)
    at com.android.tools.idea.rendering.RenderTask.lambda$null$8(RenderTask.java:755)
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

РЕДАКТИРАНЕ Това се случва само когато стилът на бутона не е зададен ИЛИ по подразбиране:

@style/Widget.MaterialComponents.Button

Задаването като неповдигнат стил работи например, така че като заобиколен вариант използвам пространството от имена на инструменти, за да покажа неповдигнат стил на бутона.

Редактиране 2 родителската тема на приложението вече е правилно зададена като Theme.AppCompat.Light.DarkActionBar. Това е проблем с IDE, тъй като работи добре на моя емулатор и устройство. Също така направих изчистване на кеша и невалидност, чисто изграждане, повторно изграждане... (стандартните неща, които правим, когато се сблъскаме със странни проблеми с IDE)

Редактиране 3 Все още няма късмет с последния A.S. 3.4.1!


person RJFares    schedule 22.04.2019    source източник
comment
зададохте ли темата на приложението си да се разширява от Theme.MaterialComponent или неговия подклас?   -  person karan    schedule 22.04.2019
comment
Този проблем продължава да съществува и в alpha06 и в Studio 3.5beta1   -  person amitavk    schedule 13.05.2019


Отговори (5)


Актуализация 3: Това най-накрая е коригирано в Студио 3.5beta2! Направихме го момчета! ????

Актуализация 2: Заявих проблем тук: https://issuetracker.google.com/issues/132562197. Моля, звезда за видимост.

Актуализация: Това е по-чисто заобиколно решение, тъй като не се налага да разхвърляме tools:style в нашите xml оформления. Това спря да работи за мен без видима причина, трябваше да се върна към първоначалното си решение, описано по-долу.


Ето заобиколно решение, докато не получим действително решение, базирано на откритието на Gautham:

Добавете този стил към вашия styles.xml:

<!--  For the sake of xml preview not breaking  -->
    <style name="UnelevatedButton" parent="Widget.MaterialComponents.Button.UnelevatedButton">
    </style>

Добавете го към вашите Button така:

<Button
        ...
        tools:style="@style/UnelevatedButton"
        style="@style/ActualButtonStyle"
        />

Обърнете внимание, че подреждането на двете е важно, редът tools трябва да е първи.

Можете да актуализирате своя UnelevatedButton, за да съответства на вашия ActualButtonStyle, за да имате визуализации в съответствие с вашите действителни бутони за изпълнение.

person amitavk    schedule 27.04.2019
comment
Това проработи при мен! Проблемът изглежда е в свойствата на котата. - person Robin Hood; 01.05.2019
comment
Също така коригирана 3.5 Beta3 :) - person abalta; 03.06.2019
comment
Това няма да работи, ако преформатирате кода си в xml файла. Този отговор трябва да бъде редактиран и да даде по-изчерпателно решение. - person blueware; 13.06.2019
comment
Изглежда отново се проваля в бета 4 - person Morten Holmgaard; 19.06.2019
comment
Изправен съм пред същия проблем на A.S. 3.4.2, Побърква ме от няколко дни, В момента тегля A.S. 3.6 Canary 3. Надяваме се, че проблемът е решен там. Ще дам обратна връзка, когато приключа с тестването - person Doilio Matsinhe; 21.07.2019

В момента се опитвам да възпроизведа този проблем, но имам нужда от повече информация. Текущата ми хипотеза е, че това е свързано с повдигането на бутоните (въз основа на извикванията на анимацията в проследяването на стека), което също е причината неповдигнатият бутон да работи според очакванията.

Бихте ли могли да подадете проблем на https://issuetracker.google.com/issues/new?component=439535&template=1121918 с името и описанието на компонента, както и исканата там информация?

person Gautham Sajith    schedule 23.04.2019
comment
Предполагам, че ще направя това, когато се върна от ваканцията си, и ще актуализирам тази тема, когато получа допълнителна информация. Засега просто използвам пространството от имена на инструменти, за да задам стил като неповдигнат - person RJFares; 23.04.2019
comment
Мога да потвърдя, неповдигнатият бутон работи и при мен. - person amitavk; 27.04.2019
comment
Подадох сигнал тук: issuetracker.google.com/issues/132562197 - person amitavk; 13.05.2019

Решението на amitav13 има един основен проблем, когато преформатирате кода, правилата по подразбиране ще пренаредят всички атрибути и след това всичко отново се поврежда.

Вместо това, докато това не бъде коригирано, моето предложение е да се създаде отделна тема на приложение за използване в прозорци за визуализация, в този пример тази тема се нарича AppTheme.PreviewFix. Просто изберете тази тема в панелите за визуализация / дизайн.

attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <attr name="buttonStyle" format="reference" />
</resources>

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.MaterialComponents">
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryDarkColor</item>
        <item name="colorSecondary">@color/secondaryColor</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="buttonStyle">@style/AppTheme.Button</item>
    </style>

    <style name="AppTheme.PreviewFix" parent="AppTheme">
        <item name="buttonStyle">@style/AppTheme.Button.PreviewFix</item>
    </style>

    <style name="AppTheme.Button" parent="Widget.MaterialComponents.Button"/>

    <style name="AppTheme.Button.PreviewFix" parent="Widget.MaterialComponents.Button.UnelevatedButton"/>
</resources>

my_layout.xml

<com.google.android.material.button.MaterialButton
        style="?buttonStyle"
        ...
</com.google.android.material.button.MaterialButton>
person ievgen    schedule 02.05.2019
comment
Страхотно, какво ще стане, ако искам да персонализирам своя Theme.Button? - person blueware; 13.06.2019

Задайте темата на приложението си от AppCompat на MaterialComponents като по-долу:

Използвайте стила по-долу:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

вместо

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
person android    schedule 22.04.2019
comment
Имам същия проблем и темата няма нищо общо с това (вече имам MaterialComponents такава) - person Mykhailo Gaidai; 22.04.2019
comment
актуализирах моето Android Studio от 3.3.2 на 3.4 и след като създадох нов проект, получих същия проблем, когато взема бутона за материал със стила @style/Widget.MaterialComponents.Button и когато актуализирам темата си, тя работи успешно - person android; 23.04.2019
comment
Това вече беше направено, добавих редакция 2 във въпроса, за да изясня - person RJFares; 23.04.2019

Имах същия проблем, изтеглих друга версия на Android Studio.

Работи добре на A.S. 3.6 Canary 3... Използвам API 29 и material_version = '1.1.0-alpha08'

Изтеглете го тук

Последната работеща версия за по-ранното ми Android Studio беше material_version = '1.0.0'.

Но той нямаше някои от новите функции на материалния компонент, така че вместо да се върна назад, реших да актуализирам Android Studio.

Направете това, което най-добре отговаря на вашите нужди.

наздраве

person Doilio Matsinhe    schedule 21.07.2019