2016-04-16 18 views
8

Trong ứng dụng của tôi, tôi sử dụng drawables vector thêm trong thư viện hỗ trợ 23,2 cho các biểu tượng vector hiển thị và nó hoạt động hoàn hảo nhưng khi tôi đặt vector để drawableLeft của EditText nó không hoạt động trong các phiên bản Android trước kẹo. Khi chạy, ResourceNotFound exception xảy ra.EditText drwableLeft không làm việc với vectơ

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

Đây là cấu hình gradle tôi:

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" 
     /> 
+2

sử dụng 'TextView # setCompoundDrawables' – pskink

+0

http://stackoverflow.com/questions/35739743/file-res-drawable-abc-ic-ab-back -material-xml-from-drawable-resource-id-0x7f020 –

+0

@pskink làm cách nào tôi có thể sử dụng TextView # setCompoundDrawables –

Trả lời

3

Cập nhật

Kể từ Thư viện hỗ trợ Android, phiên bản 23.4.0

Thêm phương thức AppCompatDelegate.setCompatVectorFromResourcesEnabled() để kích hoạt lại việc sử dụng các đối tượng vẽ vector trong đối tượng DrawableContainer trên các thiết bị chạy Android 4.4 (API cấp 19) trở xuống. Xem AppCompat v23.2 — Age of the vectors để biết thêm thông tin.

Bạn nên thêm static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } vào đầu Hoạt động của mình.


Bạn đang sử dụng AppCompat 23.3. Từ Android Developers

Đối với người dùng AppCompat, chúng tôi đã quyết định để loại bỏ các chức năng mà cho phép bạn sử dụng drawables vector từ nguồn trên các thiết bị-Lollipop trước do các vấn đề được tìm thấy trong việc thực hiện trong phiên bản 23.2.0/23.2.1. Sử dụng ứng dụng: srcCompat và setImageResource() tiếp tục hoạt động.

+1

ứng dụng: srcCompat là làm việc tốt với xem hình ảnh tôi muốn sử dụng vector cho drawableLeft của EditText –

+1

Bạn có thể làm điều đó theo lập trình: VectorDrawableCompat.create() – John

+1

Ngoài 'setCompatVectorFromResourcesEnabled' , Tôi đã phải bọc vector vẽ được trong bộ chọn, chỉ để sử dụng nó với 'drawableRight'. Như đã đề cập trong [Tuổi của vectơ] (https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.x4dvq5fe4): * Quy tắc duy nhất là nhu cầu vectơ để ở trong một tệp riêng *. – arekolek

0

Bạn có thể thêm Vector có thể vẽ trong EditText theo chương trình. Sử dụng số điện thoại VectorDrawableCompat để thêm drawableLeft/drawableRight/drawableTop/drawableBottom/drawableStart/drawableEnd.

bước:

i. Xóa android:drawableLeft="@drawable/layer_list_ic_user"

ii. Nếu EditText ở bên trong Hoạt động:

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. Nếu EditText là bên trong 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); 

Để biết thêm thông tin về VectorDrawableCompat Tham khảo này link

+0

Chỉ hoạt động trên api 17 + – MidasLefko

0

tôi phải đối mặt với vấn đề này và giải quyết nó bằng cách đặt hình ảnh vector bên trong lớp-list drawable như thế: search_grey.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/ic_search_grey" /> 
</layer-list> 

và trong EditText:

 android:drawableLeft="@drawable/search_grey" 
Các vấn đề liên quan