Я начал создавать новый проект с последними версиями androidx, jetpack и привязкой к данным.Все идет хорошо, за исключением случаев, когда я использовал androidx.constraintlayout
с databinding
.Автоматически сгенерированный класс привязки данных не может импортировать правильный пакет для класса Guideline
.Он пытается импортировать из androidx.constraintlayout.Guideline
, когда в действительности класс существует в androidx.constraintlayout.Widget.Guideline
.
Ожидаемое поведение
AndroidStudio должен импортировать пакет из androidx.constraintlayout.Widget.Guideline
вместо androidx.constraintlayout.Guideline
, и он должен нормально скомпилироваться.
Текущее поведение
Компиляторвыдает следующее сообщение об ошибке:
- Не удается найти класс символов Guideline
Возможное решение
Что ж, я мог бы прекратить использование Databinding с классом Guideline, но ...Так как это автоматически сгенерированный класс привязки данных, я также не могу изменить пакет импорта, так как он будет сгенерирован и перезаписан в любом случае во время сборки.Я не уверен, есть ли какой-нибудь способ принудительно импортировать Android studio для импорта из правильного пакета.
Обновление:
Я прекратил пользоваться Руководством. У меня был этот код от другого разработчика, и я понял,Руководящие принципы были совершенно бесполезны, я мог обойтись без них.Тем не менее, я думаю, что это все еще ошибка в Android.
Шаги для воспроизведения
Включить привязку данных для проекта Android:
dataBinding {
enabled = true
}
Импортируйте следующие библиотеки Android, которые яЯ также использую:
/**
* AndroidX Libraries
*/
implementation 'androidx.core:core-ktx:1.0.1'
implementation 'androidx.fragment:fragment:1.0.0'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.recyclerview:recyclerview:1.0.0'
implementation 'com.google.android.material:material:1.0.0'
implementation 'androidx.preference:preference:1.1.0-alpha01'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.0.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
Создание фрагмента с привязкой данных. Мой случай:
<?xml version="1.0" encoding="utf-8"?>
<layout 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"
tools:context=".fragments.emailConfirmation.EmailConfirmationFragment">
<data>
<import type="androidx.fragment.app.Fragment" />
<variable
name="viewModel"
type="android.thespikeapp.com.spike.fragments.emailConfirmation.EmailConfirmationViewModel" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true">
<androidx.constraintlayout.Guideline
android:id="@+id/image_left_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".33" />
<androidx.constraintlayout.Guideline
android:id="@+id/image_right_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".66" />
<androidx.constraintlayout.Guideline
android:id="@+id/text_left_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".16" />
<androidx.constraintlayout.Guideline
android:id="@+id/text_right_guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent=".84" />
<ImageView
android:id="@+id/imageView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
app:layout_constraintBottom_toTopOf="@id/horizontalGuideline"
app:layout_constraintEnd_toEndOf="@id/image_right_guideline"
app:layout_constraintStart_toStartOf="@id/image_left_guideline"
app:layout_constraintTop_toTopOf="parent" />
<!--android:src="@drawable/ic_confirm_email"-->
<TextView
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:gravity="center_horizontal"
android:text="@string/confirm_email_description"
android:textColor="@android:color/black"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="@id/text_right_guideline"
app:layout_constraintStart_toStartOf="@id/text_left_guideline"
app:layout_constraintTop_toBottomOf="@id/imageView" />
<androidx.constraintlayout.Guideline
android:id="@+id/horizontalGuideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.35" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:textColorHint="@color/colorPrimaryLightest"
app:layout_constraintEnd_toEndOf="@id/text_right_guideline"
app:layout_constraintStart_toStartOf="@id/text_left_guideline"
app:layout_constraintTop_toBottomOf="@id/textView">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/emailAddressEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:hint="@string/email_address"
android:inputType="textEmailAddress"
android:maxLines="1"
android:text="@={viewModel.email}"
android:textSize="18sp" />
</com.google.android.material.textfield.TextInputLayout>
<Button
android:id="@+id/updateButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="@string/submit"
android:textAllCaps="false"
app:layout_constraintEnd_toEndOf="@id/text_right_guideline"
app:layout_constraintStart_toStartOf="@id/text_left_guideline"
app:layout_constraintTop_toBottomOf="@id/textInputLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
</layout>
Попробуйте создать приложение, которое вы получите ту же ошибку
Context (Environment)
Этот код не будет компилироваться в версии AndroidStudio версии 3.2.1 с использованием kotlin 1.3.10.Также minSdkVersion имеет значение 21 и compileSdkVersion 28.
Заранее благодарен за помощь!