在我的应用中,我使用支持库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"
/>
答案 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:drawableLeftCompat
,app:drawableTopCompat
,app:drawableRightCompat
,app:drawableBottomCompat
,app:drawableStartCompat
和{{1 }}复合画图,支持向后移植的画图类型,例如app:drawableEndCompat
。
将此内容添加到您的gradle文件中
VectorDrawableCompat
您可以在TextView / EditText中使用
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
答案 5 :(得分:0)
就我而言,
在Activity类文件中将extends Activity
更改为extends AppCompatActivity
,并解决了问题。