扩展类android.support.design.widget.TextInputEditText时出错

时间:2018-04-03 18:18:48

标签: android android-layout

我遇到的问题是我的TextInputEditText没有在Android KitKat上膨胀。该应用程序适用于棒棒糖和更新。在检查logcat时,Android KitKat似乎不知道如何查找矢量文件:

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_man_user.xml from drawable resource ID #0x7f08009a

即使我的应用徽标也没有出现在KitKat上,因为它是一个矢量。在我的TextInputEditText上,我将图标添加为drawableStart。它抱怨,因为它无法找到我引用的向量。这是XML:

<LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="30dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent">
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@android:color/black"
            android:hint="@string/username_hint">
            <android.support.design.widget.TextInputEditText
                android:id="@+id/LoginScreenUsernameEditText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawableStart="@drawable/ic_man_user"
                android:drawablePadding="5dp"
                android:maxLines="1"
                android:textColor="@android:color/black"
                android:inputType="text"
                />
        </android.support.design.widget.TextInputLayout>
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textColorHint="@android:color/black"
            android:hint="@string/password_hint">
            <android.support.design.widget.TextInputEditText
                android:id="@+id/LoginScreenPasswordEditText"
                android:layout_width="match_parent"
                android:textColor="@android:color/black"
                android:layout_height="wrap_content"
                android:inputType="textPassword"
                android:drawableStart="@drawable/ic_locked_padlock"
                android:drawablePadding="5dp"
                android:maxLines="1"
                />
        </android.support.design.widget.TextInputLayout>

我的应用程序gradle文件似乎设置为矢量:

android {
compileSdkVersion 27
defaultConfig {
    applicationId "com.koeksworld.homenet"
    minSdkVersion 19
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    vectorDrawables.useSupportLibrary = true
}
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

有谁知道我能做什么,以便这些载体可以在KitKat上运行?

1 个答案:

答案 0 :(得分:0)

Android最近引入了Vector支持(大约2年前我认为)。可以通过将vectorDrawables.useSupportLibrary = true添加到build.gradle文件来启用它:

// Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  

您会注意到此新属性仅存在于Gradle插件的2.0版本中。如果您使用的是Gradle 1.5,则可以使用

    // Gradle Plugin 1.5  
     android {  
       defaultConfig {  
         generatedDensities = []  
      }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  

Android开发者博客指出,

  

如果您使用的是AppCompat 23.2.0,则需要设置这些标志。   从AppCompat 23.2.1和标志开始,此要求已经放宽   仅在您希望使用支持向量drawable时才需要。

由于Android如何加载drawable,并非每个接受drawable id的地方(例如在XML文件中)都支持加载矢量drawable。但是AppCompat可以很容易地使用矢量绘图。 将AppCompat与ImageView(ImageButton,FloatingActionButton等)一起使用时,您将能够使用新的app:srcCompat属性来引用矢量drawable:

 <ImageView  
  android:layout_width="wrap_content"  
  android:layout_height="wrap_content"  
  app:srcCompat="@drawable/ic_add" />  

博客明确指出:

  

直接引用app:srcCompat之外的矢量绘图   在Lollipop之前失败。

有关详细信息,请参阅Android Developers Blog