2015-12-01 10 views
12

Ich habe damit seit über einer Woche gekämpft, weil ich denke, dass es etwas mit meiner Umgebung sein muss, aber ich kann es nicht eingrenzen.

Ich starte ein leeres Projekt, füge eine einzelne "Leere" Aktivität hinzu und akzeptiere alle Standardeinstellungen. Nachdem das Projekt abgeschlossen ist, füge ich eine Aktivität "Einstellungen" hinzu.

In MainActivity.java, füge ich zwei Zeilen Code, um die beiden Aktivitäten zu verbinden, und dann das Projekt zu erstellen.

public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 

     Intent intent = new Intent(this, SettingsActivity.class); 
     startActivity(intent); 

     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

ich senden, um die Anwendung zu debuggen, und wenn ich „Einstellungen“ auf der Aktionsleiste auswählen, stürzt die Anwendung mit:

android.content.res.Resources$NotFoundException: File res/drawable/ic_sync_black_24dp.xml from drawable resource ID #0x7f020049 

ich diesen gleichen Fehler auf den virtuellen Bildern, und wenn Ich sende das APK an ein echtes physisches Gerät und versuche, die Einstellungsaktivität einzusehen.

Ich habe mehrmals neue und saubere Projekte gestartet, und ich bekomme das gleiche Ergebnis mit jedem Projekt. Ich habe saubere Builds ausprobiert, ich habe versucht, das R.java-Zeug zu löschen. Wenn ich mir die res/drawable/ic_sync_black_24dp.xml in meinem Projekt anschaue (die mit dem Assistenten zum Hinzufügen neuer Aktivitäten erstellt wurde), kann ich das Symbol sehen und alles sieht normal aus.

Wenn ich die eine Zeile aus der Datei pref_headers.xml lösche, die dieses Symbol angibt, wird das Projekt ordnungsgemäß erstellt, und die Einstellungsaktivität enthält Symbole für die beiden anderen Optionen, jedoch nicht für das Symbol ic_sync_black_24dp.xml.

Hier ist die Linie, die ich manuell aus pref_headers.xml löschen müssen:

android:icon="@drawable/ic_sync_black_24dp" 

Das ist also die gültige pref_headers.xml Datei für mich:

<!-- These settings headers are only used on tablets. --> 

<header 
    android:fragment="com.schramauto.anothertrial.SettingsActivity$GeneralPreferenceFragment" 
    android:icon="@drawable/ic_info_black_24dp" 
    android:title="@string/pref_header_general" /> 

<header 
    android:fragment="com.schramauto.anothertrial.SettingsActivity$NotificationPreferenceFragment" 
    android:icon="@drawable/ic_notifications_black_24dp" 
    android:title="@string/pref_header_notifications" /> 

<header 
    android:fragment="com.schramauto.anothertrial.SettingsActivity$DataSyncPreferenceFragment" 
    android:title="@string/pref_header_data_sync" /> 

In res Drawable gibt es 3 xml-Dateien, die vom Assistenten hinzugefügt wurden und die Einstellungsaktivität hinzufügten. Alle 3 werden für mich korrekt angezeigt und zeigen eine gültige Vorschau eines Symbols an.

Hier wird der Inhalt des "guten" xml, ic_info_black_24dp.xml ist:

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="24dp" 
    android:height="24dp" 
    android:viewportHeight="24.0" 
    android:viewportWidth="24.0"> 
    <path 
     android:fillColor="#FF000000" 
     android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm1,15h-2v-6h2v6zm0,-8h-2V7h2v2z" /> 
</vector> 

Hier ist die fragwürdige XML (ic_sync_black_24dp.xml):

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="24.0dp" 
    android:height="24.0dp" 
    android:viewportHeight="24.0" 
    android:viewportWidth="24.0"> 
    <path 
     android:fillColor="#FF000000" 
     android:pathData="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01,-.25 1.97,-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0,-4.42,-3.58,-8,-8,-8zm0 14c-3.31 0,-6,-2.69,-6,-6 0,-1.01.25,-1.97.7,-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4,-4,-4,-4v3z" /> 
</vector> 

Auch hier habe ich versucht, das vielleicht 15 mal (Erstellen von brandneuen Projekten und Verbinden der beiden Aktivitäten), neu gestartet, google gesucht, hier gesucht, und ich kann nicht herausfinden, was mit ic_sync_black_24dp.xml falsch ist, das der Assistent in mein Projekt gelegt hat.

Da ich eine Annahme mache, dass dies in meinem IDE oder meinem lokalen Build-Konfiguration Umwelt sein kann, sind hier einige hohe Details zu meinem Setup: Microsoft Windows 10, Android Studio 1.5, JRE 1.8.0

+0

Wo ist ic_sync_black_24dp Datei? – Sunny

+0

Haben Sie versucht, es einfach umzubenennen? – Nanoc

+2

Ich folgte Ihren Schritten, um dies auf meinem Setup neu zu erstellen, und es verursachte kein Problem. Android Studio 1.5 auf dem Mac. Der einzige sofort erkennbare Unterschied zwischen den funktionierenden und nicht arbeitenden Drawables besteht darin, dass die Breite und Höhe in der nicht arbeitenden Zeichenkette auf "24.0dp" anstatt auf "24dp" wie bei den anderen gesetzt wird, obwohl das, wie gesagt, nicht der Fall ist Es gibt kein Problem mit meinem Setup. –

Antwort

5

Es scheint, dass das Problem lag mit API 21, die 24.0dp das war für mich das Problem nicht lösen, anstatt erwähnt Empfang I:

E/PathParser: error in parsing "c-3.31 0,-6,-2.69,-6,-6 0,-1.01.25,-1.97.7,-2.8" 

ich die Antwort auf https://github.com/google/material-design-icons/issues/225 gefunden

Es stellt sich out the pathData ist ungültig kann in API 21 nicht richtig geparst werden (das Problem existiert nicht in API 22 oder 23). einfach die PathData ersetzen mit:

android:pathData="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01,-.25 1.97,-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0,-4.42,-3.58,-8,-8,-8zm0 14c-3.31 0,-6,-2.69,-6,-6 0,-1.01 .25,-1.97 .7,-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4,-4,-4,-4v3z" 
+0

Danke. Ich sehe dieses Problem immer noch auf meinem Telefon und anderen ähnlichen Telefonen. Das Entfernen des Symbols behebt es, aber ich bevorzuge Ihre Lösung. – Baronz

2

Lewis bemerkte den Hinweis, die mir helfen, das Problem zu lösen. Ich habe die 24 geändert.0 bis 24

android:width="24dp" 
android:height="24dp" 

Und jetzt wird der Code ohne Fehler ausgeführt! Danke Lewis!

+1

Was ist die Android-Version Ihres Geräts? Ich habe das gleiche Problem auf Android 5-Gerät festgestellt, aber das Android 6-Gerät funktioniert gut mit der gleichen Konfiguration! – Farley

+1

Ich bin verwirrt darüber, ich habe nur den Patch für Android Studio, und jetzt ist das Problem zurück, unabhängig davon, ob ich 24dp oder 24.0dp. Aber wenn ich die Referenz einfach komplett entferne, ist es in Ordnung. Es ist nur dieses eine dumme XML. Meine virtuellen Geräte, auf denen ich getestet habe, waren 5.0.1 mit Google-Diensten und 6.0. Meine tatsächlichen Telefone waren 5.0 und 5.1 - alle weisen den gleichen Fehler auf. Ich bin nicht froh, dass Sie das Problem sehen, aber ich bin froh, dass jemand es reproduzieren kann. Hoffentlich können wir herausfinden, was wirklich los ist. – Baronz

+2

Ich überprüfte die Ausnahmebedingungsnachricht und es zeigte, dass einige Werte in der Android: pathData Zeichenfolge falsch sind, nicht nur die 24.0dp, aber es funktioniert gut auf einem Android Marshmallow-Gerät. Dann habe ich andere Aktivitäten ausprobiert und zum Glück funktionieren andere Aktivitäten wie die Navigationsleiste. Die Problemumgehung besteht also darin, die Aktivität Einstellungen auf Android 5-Geräten zu vermeiden. – Farley

2

Das Problem möglicherweise Ihre Einstellung für Sie "Target SDK". Das Standardverhalten kann Android einstellen. 6. Stellen Sie es für Android 5.0.1 (21) ein und stellen Sie sicher, dass Sie das SDK vom SDK Manager heruntergeladen haben. Wahrscheinlich haben Sie zuvor die Einstellungsaktivität mithilfe des Assistenten erstellt. Daher sollten Sie die Einstellungsaktivität löschen, sicherstellen, dass Sie über die entsprechenden SDK- und Projekteinstellungen verfügen, und sie erneut erstellen.

+0

In meinem Fall habe ich jedes Mal brandneue Projekte gestartet, und selbst in einem neuen/sauberen Projekt sah ich dieses Verhalten. Es war keine "alte" Einstellungsaktivität. – Baronz

Verwandte Themen