找不到符号类准则

时间:2018-11-20 13:16:20

标签: android kotlin

我开始用最新的androidx,jetpack和数据绑定创建一个新项目。除了我将androidx.constraintlayoutdatabinding结合使用时,其他一切都很好。自动生成的数据绑定类无法为Guideline类导入正确的包。实际上,该类存在于androidx.constraintlayout.Guideline中时,它正尝试从androidx.constraintlayout.Widget.Guideline导入。

预期行为

AndroidStudio应该从androidx.constraintlayout.Widget.Guideline而不是androidx.constraintlayout.Guideline导入软件包,并且应该可以正常编译。

当前行为

编译器将引发以下错误:

  • 找不到符号类准则

可能的解决方案

好吧,我可以停止将databinding与guideline类一起使用,但是...由于它是自动生成的databinding类,因此我也无法更改import包,因为它将在生成时被生成并再次被覆盖。我不确定是否有任何方法可以强制Android Studio从正确的包中导入。

更新:

我确实停止使用该准则,而我从另一位开发人员那里获得了此代码,并意识到该准则完全没有用武之地。但是,我确实认为这仍然是Android中的错误。

复制步骤

为android项目启用数据绑定:

dataBinding {
        enabled = true
}

导入以下我也在使用的androidx库:

/**
 * 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>

尝试构建该应用程序,您应该遇到相同的错误

上下文(环境)

使用kotlin 1.3.10的AndroidStudio版本3.2.1不会编译此代码。还将minSdkVersion设置为21,并将compSSdkVersion设置为28。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:2)

@CommonsWare指出了一些我完全错过的事情,我的布局文件包含androidx.constraintlayout.Guideline而不是androidx.constraintlayout.Widget.Guideline来解决问题。但是,我猜想当我使用重构工具迁移到Androidx时,它会将Guideline标签转换为初始标签,而不是初始标签。感谢CommonsWare指出愚蠢的错误!