Макет ограничения. Проблемы с рендерингом. Редактор макетов

Я каждый день сталкиваюсь с очень неприятной проблемой ConstraintLayout в моем проекте.

Файл градиента проекта:

buildscript {

    ext.support_library_version = '27.0.2'
    ext.play_services_version = '11.6.2'
    ext.firebase_version = '11.6.2'

    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'io.realm:realm-gradle-plugin:4.2.0'
        classpath 'com.google.gms:google-services:3.1.2'

        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        google()
        maven { url "https://maven.google.com" }
        maven { url 'https://jitpack.io' }
    }
}

Это моя короткая версия приложения gradle:

apply plugin: 'com.android.library'
apply plugin: 'realm-android'

// set to 'cmake', 'none'
def nativeBuildSystem = 'none'//'cmake'

realm {
    syncEnabled = false
}

android {
    defaultConfig {
        targetSdkVersion 27
        compileSdkVersion 27
        minSdkVersion 21
        // for using vectors for less than 21 API
        vectorDrawables.useSupportLibrary = true

        versionCode 56
        dexOptions {
            preDexLibraries true
            javaMaxHeapSize "4g"
        }

        // Enabling multidex support.
        multiDexEnabled true
        versionName "1.6.5"

        renderscriptTargetApi 2
        renderscriptSupportModeEnabled true    // Enable RS support

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

configurations {
    all*.exclude group: 'commons-logging', module: 'commons-logging'
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    /*********************************  Deep Linking Library *********************************************/
    api 'com.airbnb:deeplinkdispatch:3.1.1'
    annotationProcessor 'com.airbnb:deeplinkdispatch-processor:3.1.1'

    /*********************************    Android SDK  *********************************************/
    api "com.android.support:appcompat-v7:$support_library_version"
    api 'com.android.support.constraint:constraint-layout:1.0.2'
    api "com.android.support:percent:$support_library_version"
    api "com.android.support:recyclerview-v7:$support_library_version"
    api "com.android.support:gridlayout-v7:$support_library_version"
    api "com.android.support:cardview-v7:$support_library_version"
    api "com.android.support:design:$support_library_version"
    api "com.android.support:support-vector-drawable:$support_library_version"
    api "com.android.support:support-core-utils:$support_library_version"
    api 'com.android.support:multidex:1.0.2'

}

Ниже то, что я вижу в редакторе макетов:

введите здесь описание изображения

Ниже моего xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</android.support.constraint.ConstraintLayout>

Редактор макетов в этом случае говорит:

введите здесь описание изображения

И если я нажму Показать исключение, я увижу:

java.lang.NegativeArraySizeException
at android.support.constraint.R$styleable.<clinit>(Unknown Source)
at android.support.constraint.ConstraintLayout.init(ConstraintLayout.java:440)
at android.support.constraint.ConstraintLayout.<init>(ConstraintLayout.java:420)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.jetbrains.android.uipreview.ViewLoader.createNewInstance(ViewLoader.java:481)
at org.jetbrains.android.uipreview.ViewLoader.loadClass(ViewLoader.java:264)
at org.jetbrains.android.uipreview.ViewLoader.loadView(ViewLoader.java:222)
at com.android.tools.idea.rendering.LayoutlibCallbackImpl.loadView(LayoutlibCallbackImpl.java:211)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:337)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:348)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:248)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:394)
at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:325)
at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:384)
at com.android.tools.idea.layoutlib.LayoutLibrary.createSession(LayoutLibrary.java:193)
at com.android.tools.idea.rendering.RenderTask.createRenderSession(RenderTask.java:547)
at com.android.tools.idea.rendering.RenderTask.lambda$inflate$3(RenderTask.java:681)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
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)

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


person Vlad    schedule 07.12.2017    source источник
comment
покажи нам свой код java и xml   -  person Tara    schedule 07.12.2017
comment
это пустой макет, корень которого является макетом ограничений без детей вообще   -  person Vlad    schedule 07.12.2017
comment
показать свой xml-код без предварительного просмотра   -  person Tara    schedule 07.12.2017
comment
пожалуйста, добавьте файл gradle вашего приложения.   -  person Ratilal Chopda    schedule 07.12.2017
comment
Для двух других AppCompatImageView и AppCompatTextView вам нужно изменить родительскую тему с Theme.AppCompat..... на Base.Theme.AppCompat...! Build и Refresh, и эти две проблемы исчезли. То же самое на моей стороне, но у меня все еще есть проблема с ConstraintLayout :-(   -  person chrisonline    schedule 05.01.2018
comment
@Vladislav: Вы получаете ту же ошибку, если используете android.support.v7.widget.Toolbar? Я также получаю NegativeArraySizeException!   -  person chrisonline    schedule 05.01.2018
comment
@chrisonline да, ты прав. Если я изменю тему, проблемы с AppCompatTextView и AppCompatImageView действительно исчезнут. И да, проблема с ConstraintLayout все еще существует... Я действительно не знаю, что делать, в итоге я выполнил всю работу по макету в другом тестовом проекте... Звучит безумно, но пока я не знаю, как это сделать. решить эту проблему.   -  person Vlad    schedule 06.01.2018
comment
@Vladislav: Ты видел мое решение? Это также работает на вашей стороне таким образом?   -  person chrisonline    schedule 09.01.2018


Ответы (2)


Проблема.
Кажется, у редактора макетов возникают проблемы, если у вас слишком много атрибутов в одном теге <declare-stylable>, определенном в файле attr.xml. !

Решение.
У меня есть 49 атрибутов в одном теге <declare-stylable>.
Если я удалю 4 атрибута, у меня будет 45, Редактор макетов работает.

Я также добавил проблему в средство отслеживания проблем Google:
https://issuetracker.google.com/issues/71641021

ОБНОВЛЕНИЕ от проблемы Google:
это было исправлено в выпуске Android Studio 3.1.

person chrisonline    schedule 07.01.2018
comment
Да!! У меня было более 100 атрибутов в 1 ‹declare-styable› Большое спасибо. Это работает, в конце концов! - person Vlad; 10.01.2018

Не используйте ConstraintLayout, а используйте Relative... или Linear.... Это должно сработать.

<?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:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:orientation="vertical">
    <EditText
        android:layout_width="match_parent" />
</LinearLayout>
person Ashish    schedule 17.01.2018
comment
Этот ответ вообще не имеет отношения к моему вопросу. Если бы вы посмотрели на мой вопрос более внимательно, вы бы поняли, что я имел в виду. - person Vlad; 18.01.2018