Как заставить ConstraintLayout (androidx.constraintlayout.widget) работать с MaterialButton (com.google.android.material.button)? - PullRequest
0 голосов
/ 26 июня 2019

Постановка проблемы

Я использую com.google.android.material.button.MaterialButton внутри androidx.constraintlayout.widget.ConstraintLayout, где компоновка ограничений не может развернуть или обнаружить ограничения material button.

код

   <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".views.screens.VeritasFolderReadSelectionScreen">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/folderSelectToolbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:background="@color/startGrad"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/AppBarOverlay"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/folderSelectMessage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="4dp"
        android:text="Select folders you want PeerPots to read"
        android:textSize="16sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/folderSelectToolbar"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/folderRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        app:layout_constraintTop_toBottomOf="@id/folderSelectMessage"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

    <!-- Following code not working -->
    <com.google.android.material.button.MaterialButton
        android:id="@+id/folderViewButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Done"
        android:textSize="12sp"
        android:layout_marginBottom="16dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

ScreenShot

enter image description here

Кнопка материала не видна

ОБНОВЛЕНО

Ошибка при рендеринге

java.lang.IllegalArgumentException: java.lang.ClassCastException@207d8929 по адресу sun.reflect.GeneratedMethodAccessor226.invoke (неизвестный источник) по адресу sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) по адресу java.lang.hoj.j.jj.mj.vj.vjandroid.animation.в android.animation.PropertyValuesHolder.access $ 400 (PropertyValuesHolder.java:38) в android.animation.PropertyValuesHolder $ FloatPropertyValuesHolder.setAnimatedValue (PropertyValuesHolder.java:1387) в объекте android.animation.java.Ab.animation.ValueAnimator.animateBasedOnTime (ValueAnimator.java:1339) в android.animation.ValueAnimator.doAnimationFrame (ValueAnimator.java:1471) в android.animation.ValueAnimator.pulseAnimationFrame.orma.pulseFrame (AnimatorSet.java:1163) в android.animation.AnimatorSet.handleAnimationEvents (AnimatorSet.java:1146) в android.animation.AnimatorSet.doAnimationFrame (AnimatorSet.java:1046) в анимации анимации и анимации.: 146) на android.animation.AnimationHandler.access $ 100 (AnimationHandler.java:37) на android.animation.AnimationHandler $ 1.doFrame (AnimationHandler.java:54) на android.view.Choreographer $ CallbackRecord.run (Choreographer.java:947) в android.view.Choreographer.doCallbacks (Choreographer.java:761) в android.view.Choreographer_Delegate.doFrame (Choreographer_Delegate.java:66) в com.androidb.labli.RenderSessionImpl.renderAndBuildResult (RenderSessionImpl.java:563) в com.android.layoutlib.bridge.impl.RenderSessionImpl.render (RenderSessionImpl.java:425) в com.android.layoutlib.bridge.BridgeRenderS2.) на com.android.ide.common.rendering.api.RenderSession.render (RenderSession.java:151) на com.android.ide.common.rendering.api.RenderSession.render (RenderSession.java:133) на ком.android.tools.idea.rendering.RenderTask.lambda $ null $ 8 (RenderTask.java:755) в java.util.concurrent.CompletableFuture $ AsyncSupply.run (CompletableFuture.java:1590) в java.util.concurrent.ecutorP(ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) в java.lang.Thread.run (Thread.javа: 745)

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Я убедился, что все выглядит хорошо, и это работает. Как вы видите на прикрепленном изображении, это ваш вышеупомянутый код.

enter image description here

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

реализация 'com.google.android.material: материал: 1.0.0'

enter image description here

0 голосов
/ 26 июня 2019

После тестирования кода на других компьютерах причины найденной ошибки:

  1. Отсутствие поддержки системы - Система, используемая для кодирования, не смогла предоставить достаточно ресурсов для эффективной визуализации представлений и для которых предварительный просмотр не работает.

  2. Эффективность Android Studio - В системах с низкой пропускной способностью Android Studio не может хорошо управлять зависимостями при рендеринге и, таким образом, выдает ошибку java.lang.IllegalArgumentException: java.lang.ClassCastException

Решение

  1. Оптимальное решение - Используйте рекомендуемую конфигурацию системы согласно документации.

  2. Страусовое решение - запускать приложение каждый раз, когда в пользовательский интерфейс вносятся изменения, чтобы увидеть, как оно работает на самом деле, без зависимости от Preview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...