EditText drwableLeft不使用向量

时间:2016-04-16 06:46:16

标签: android vector

在我的应用中,我使用支持库23.2 中添加的矢量绘图作为显示矢量图标,它工作正常但是当我将矢量设置为EditText的drawableLeft时不适用于pre-lollipop android版本。 在运行时,会发生 ResourceNotFound异常

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

这是我的gradle配置:

apply plugin: 'com.android.application'

android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
    applicationId "com.example.test"
    minSdkVersion 14
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    vectorDrawables.useSupportLibrary = true
    generatedDensities = []
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
       'proguard-rules.pro'
    }
}
sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/res/assets/'] } }
  }

dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:support-v4:23.3.0'
compile 'com.android.support:design:23.3.0'
}
apply plugin: 'com.google.gms.google-services'

EditText:

     <EditText
        android:id="@+id/et_username_or_email"
        android:layout_width="@dimen/edit_text_width"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/layer_list_ic_user"
        android:textColorHint="@color/ColorBlackPrimary"
        android:inputType="textEmailAddress|text"
        android:textColor="@color/ColorBlackPrimary"
        android:textSize="@dimen/text_small"
        />

6 个答案:

答案 0 :(得分:4)

您可以通过编程方式在EditText中添加Vector Drawable。利用 VectorDrawableCompat 来添加drawableLeft / drawableRight / drawableTop / drawableBottom / drawableStart / drawableEnd。

<强>步骤:

我。删除android:drawableLeft="@drawable/layer_list_ic_user"

II。如果EditText在Activity:

EditText etUserName= (EditText)findViewById(R.id.et_username_or_email);
VectorDrawableCompat drawableCompat=VectorDrawableCompat.create(getResources(), R.drawable.layer_list_ic_user, etUserName.getContext().getTheme());
etUserName.setCompoundDrawablesRelativeWithIntrinsicBounds(drawableCompat, null, null, null);

III。如果EditText在Fragment中:

EditText etUserName= (EditText)view.findViewById(R.id.et_username_or_email);
VectorDrawableCompat drawableCompat=VectorDrawableCompat.create(getActivity().getResources(), R.drawable.layer_list_ic_user, etUserName.getContext().getTheme());
etUserName.setCompoundDrawablesRelativeWithIntrinsicBounds(drawableCompat, null, null, null);

有关VectorDrawableCompat的更多信息,请参阅此link

答案 1 :(得分:3)

<强>更新

自Android支持库以来,修订版23.4.0

  

添加了AppCompatDelegate.setCompatVectorFromResourcesEnabled()方法,以便在运行Android 4.4(API级别19)及更低级别的设备上重新启用DrawableContainer对象中矢量drawable的使用。有关详细信息,请参阅AppCompat v23.2 — Age of the vectors

您应该将static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); }添加到活动的顶部。


您正在使用AppCompat 23.3。来自Android Developers

  

对于AppCompat用户,由于版本23.2.0 / 23.2.1中的实现中发现的问题,我们决定删除允许您使用Lollipop前设备上的资源使用矢量绘图的功能。使用app:srcCompat和setImageResource()继续工作。

答案 2 :(得分:1)

我面对这个问题并通过将矢量图像放在图层列表中来解决它: search_grey.xml

        android:drawableLeft="@drawable/search_grey"

并在EditText中:

configure --prefix /home/installations/gcc48 --enable-languages=c,c++ \
--disable-multilib --enable-threads=posix --disable-nls \
--disable-bootstrap --disable-checking --enable-multiarch \
--enable-shared --program-suffix=4.8 --with-system-zlib \
--with-tune=generic --without-included-gettext

答案 3 :(得分:1)

向量drawables不能作为drawableLeft / drawableRight / ..在棒棒糖前设备上运行,请勿在{{1​​}}上设置drawableLeft。 初始化EditText后,设置drawableLeft,如下所示。

EditText xml

答案 4 :(得分:0)

AppCompatTextView now支持app:drawableLeftCompatapp:drawableTopCompatapp:drawableRightCompatapp:drawableBottomCompatapp:drawableStartCompat和{{1 }}复合画图,支持向后移植的画图类型,例如app:drawableEndCompat

将此内容添加到您的gradle文件中

VectorDrawableCompat

您可以在TextView / EditText中使用

implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'

答案 5 :(得分:0)

就我而言,

在Activity类文件中将extends Activity更改为extends AppCompatActivity,并解决了问题。