2016-04-16 17 views
8

nella mia app, io uso vettore drawable aggiunti nella biblioteca sostegno 23.2 per visualizzazione icone vettoriali e funziona perfettamente, ma quando ho impostato il vettore a drawableLeft di EditText non funziona nelle versioni Android pre-lecca-lecca. In fase di esecuzione, si verifica l'eccezione ResourceNotFound.EditText drwableLeft non funzionano con i vettori

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

Questa è la mia configurazione 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" 
     /> 
+2

uso '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 Come posso usare TextView # setCompoundDrawables –

risposta

3

Aggiornamento

Dal libreria di supporto Android, revisione 23.4.0

Aggiunto il metodo AppCompatDelegate.setCompatVectorFromResourcesEnabled() per riattivare l'utilizzo di drawable vettoriali in oggetti DrawableContainer su dispositivi con Android 4.4 (livello API 19) e versioni precedenti. Vedere AppCompat v23.2 — Age of the vectors per ulteriori informazioni.

È necessario aggiungere static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } all'inizio dell'attività.


Si sta utilizzando AppCompat 23.3. Da Android Developers

Per gli utenti AppCompat, abbiamo deciso di rimuovere la funzionalità che consentono di utilizzare drawable vettoriali da risorse su dispositivi pre-lecca a causa di problemi rilevati nella realizzazione nella versione 23.2.0/23.2.1. Usando app: srcCompat e setImageResource() continua a funzionare.

+1

app: srcCompat funziona bene con la vista dell'immagine voglio usare il vettore per drawableLeft di EditText –

+1

Puoi farlo a livello di codice: VectorDrawableCompat.create() – John

+1

In aggiunta a 'setCompatVectorFromResourcesEnabled' , Ho dovuto avvolgere il vettore disegnabile in un selettore, solo per usarlo con 'drawableRight'. Come menzionato in [Age of the vectors] (https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.x4dvq5fe4): * L'unica regola è che il vettore ha bisogno essere in un file separato *. – arekolek

0

È possibile aggiungere Vector Drawable in EditText a livello di programmazione. Usa VectorDrawableCompat inorder per aggiungere drawableLeft/drawableRight/drawable Top/drawableBottom/drawableStart/drawableEnd.

Passi:

i. Rimuovi android:drawableLeft="@drawable/layer_list_ic_user"

ii. Se EditText è all'interno dell'attività:

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. Se EditText è dentro 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); 

Per ulteriori informazioni su VectorDrawableCompat Suggerire questo link

+0

Funziona solo su API 17 + – MidasLefko

0

Affronto questo problema e risolverlo mettendo il vettore immagine strato interno-list drawable così: search_grey.xml

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

e in EditText:

 android:drawableLeft="@drawable/search_grey" 
Problemi correlati