2016-04-16 9 views
8

w moim app, używam wektorowe kanału alfa dodane w bibliotece wsparcia 23,2 do wyświetlania ikon wektorowych i działa idealnie, ale kiedy ustawić wektor do drawableLeft z EditText nie działa w wersji na Androida przed premierą. W środowisku wykonawczym występuje wyjątek ResourceNotFound.EditText drwableLeft nie działają z wektorami

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

To mój Gradle konfiguracja:

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

użycie '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 jak mogę użyć TextView # setCompoundDrawables –

Odpowiedz

3

Aktualizacja

Ponieważ Android Library Support wersja 23.4.0

Dodano metodę AppCompatDelegate.setCompatVectorFromResourcesEnabled() w celu ponownego włączenia użycia wektorów w obiektach DrawableContainer na urządzeniach z Androidem 4.4 (poziom API 19) i niższych. Aby uzyskać więcej informacji, patrz AppCompat v23.2 — Age of the vectors.

Powinieneś dodać static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } na początek swojej aktywności.

Użytkownik używa AppCompat 23.3. Od Android Developers

Dla użytkowników AppCompat, zdecydowaliśmy się usunąć funkcjonalność, która pozwoli na korzystanie z zasobów kanału alfa wektorowej na pre-Lollipop urządzeń z powodu problemów występujących w realizacji w wersji 23.2.0/23.2.1. Korzystanie z aplikacji: srcCompat i setImageResource() nadal działa.

+1

: srcCompat działa dobrze z widokiem obrazu Chcę używać wektora do drawableLeft of EditText –

+1

Możesz to zrobić programowo: VectorDrawableCompat.create() – John

+1

Oprócz 'setCompatVectorFromResourcesEnabled' , Musiałem zawinąć wektor do rysowania w selektorze, aby użyć go z 'drawableRight'. Jak wspomniano w [Wiek wektorów] (https://medium.com/@chrisbanes/appcompat-v23-2-of-the-vectors-91cbafa87c88#.x4dvq5fe4): * Jedyną zasadą jest to, że wektor potrzebuje być w osobnym pliku *. – arekolek

0

Można programowo dodać wektor Drawable w EditText. Użyj wektora VectorDrawableCompat, aby dodać drawableLeft/drawableRight/drawableTop/drawableBottom/drawableStart/drawableEnd.

Kroki:

ja. Usuń android:drawableLeft="@drawable/layer_list_ic_user"

ii. Jeśli EditText jest w działaniu:

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. Jeśli EditText jest wewnątrz 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); 

uzyskać więcej informacji na VectorDrawableCompat Patrz ten link

+0

Działa tylko w api 17 + – MidasLefko

0

mogę zmierzyć się z tym problem i go rozwiązać poprzez umieszczenie wizerunku wektor wewnątrz warstwy lista rozciągliwej tak: search_grey.xml

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

aw EditText:

 android:drawableLeft="@drawable/search_grey" 
Powiązane problemy