«Компоненты дизайна материала» не отображаются в средстве предварительного просмотра макета - PullRequest
3 голосов
/ 28 апреля 2019

Во всех моих приложениях для Android я реализовал зависимость Material Design Components (MDC) для AndroidX, и все работало нормально , пока я не обновил Android Studio до стабильной версии 3.4 версия. Приложение прекрасно компилируется и работает как на эмуляторах, так и на реальных телефонах, но Просмотр макета XML в Android Studio не отображает MDC , а страница предварительного просмотра просто зависает.

Я уже много раз пробовал, и ни одна из них не устранила мою проблему:

  • Обновление до Android Studio 3.5 Canary или Dev
  • Изменение targetSdkVersion и compileSdkVersions на 28
  • Переустановите Android Studio
  • Недействительный кеш и перезапуск
  • Используйте разные Theme.MaterialComponents варианты

Эта проблема с XML Layout Previewer ТОЛЬКО ПРОИСХОДИТ в макетах, в которых есть как минимум 1 MDC. Если нет этих компонентов, все работает нормально.

Мой styles.xml файл выглядит так:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="colorGroupPrimary">@color/colorPrimary</item>
        <item name="colorGroupPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorGroupAccent">@color/colorAccent</item>
        <item name="android:fontFamily">@font/montserrat</item>
        <item name="android:windowBackground">@drawable/splash_bg</item
</style>

Даже если я увеличу AppTheme до Theme.MaterialComponents.Light.NoActionBar, он не будет работать.

Мой build.gradle файл выглядит так:

android {
    compileSdkVersion 28
    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 28
        maxSdkVersion 28
        ...
    }
    ...
}

dependencies {
    implementation 'com.google.android.material:material:1.1.0-alpha05'
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
    ...
}

Пример макета, который не отображается

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
    android:background="@color/colorBackground"
    tools:context=".Activities.AddNoteActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:backgroundTint="?attr/colorGroupPrimaryDark">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/addNote_toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:paddingStart="6dp"
            android:paddingEnd="6dp"
            app:contentInsetStartWithNavigation="0dp"
            app:navigationIcon="@drawable/ic_close"
            app:title="@string/addNotes_toolbar"
            app:titleTextAppearance="@style/TextAppearance.CACH.Title"
            app:titleTextColor="@color/colorWhite" />

    </com.google.android.material.appbar.AppBarLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="?attr/actionBarSize"
        android:orientation="vertical"
        android:padding="10dp">

        <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/addNote_titleInput"
            style="@style/Widget.CACH.TextInputLayout.Primary"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp"
            android:hint="@string/addNotes_title"
            android:paddingBottom="8dp"
            app:errorEnabled="true">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/addNote_titleText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:textColor="@color/colorBlack"
                android:textSize="22sp" />

        </com.google.android.material.textfield.TextInputLayout>
    </LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

В этом примере панель инструментов и панель приложений не доставляют никаких проблем, но на данный момент я добавил TextInputLayout и TextInputEditText, а средство предварительного просмотра зависло. Если в другом макете я добавлю MaterialButton или FloatingActionButton или MaterialCardView то же самое происходит.

(В этом примере все атрибуты style расширяют тему MaterialComponent, специфичную для компонента. Пример: TextInputLayout стиль имеет в качестве родителя Widget.MaterialComponents.TextInputLayout.OutlinedBox)

Спасибо за ваши ответы !!

Ответы [ 4 ]

1 голос
/ 06 июля 2019

У меня была та же проблема, я переключил тему с

<style name="AppTheme" parent="Theme.MaterialComponents.Light">

на:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.Bridge">

Может быть, это к окончательному решению, но это хороший обходной путь для меня.

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

У меня была та же проблема, просто понизить версию библиотеки материалов до альфа-04. Сейчас альфа 7 является последней версией, но от альфа 05 до 07 эта проблема существует.

0 голосов
/ 07 июля 2019

Я не мог найти полное решение этой проблемы, но то, что я пробовал и отлично работал каждый раз, загружало AndroidStudio 3.5 Beta . Использование этой версии IDE решило все проблемы, которые у меня были с MaterialComponents.

0 голосов
/ 04 июля 2019

С тех пор как я обновил Android Studio 3.3 до версии 3.4, AppbarLayout вызвал проблему с рендерингом и вызвал исключение Javalang, как показано на рисунке. Я все еще ищу решение enter image description here

...