1

Ich habe eine App geschrieben, die auf Farben in Ressourcen definiert basiert. Einige werden direkt in der XML-Layoutdatei festgelegt, andere werden in Code festgelegt. Beispiele:android: textColor funktioniert nicht mehr in Marshmallow

Farbdefinition in res/values/styles.xml:

<color name="orvGyro">#33B5E5</color> 

Layout:

<TextView 
    android:id="@+id/textView3" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/dotSpace" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="@color/orvGyro" /> 

Farbe in Code:

accStatus.setTextColor(getResources().getColor(R.color.somecolor)); 

Die App Ziele API 17. Bis Lollipop, hat dies funktionierte einwandfrei und zeigte die richtigen Farben. Nach der Migration zu Marshmallow (Cyanogenmod 13) werden alle diese Farben orange angezeigt. Andere Farben, die in Java-Code und nicht in Ressourcen definiert sind, scheinen korrekt angezeigt zu werden.

Ich habe versucht, die Ziel-API auf 23 zu ändern und Stile für API 21+ hinzuzufügen, ohne Erfolg.

Was ist hier falsch? Ist das ein Fehler in CyanogenMod13 oder mache ich etwas falsch?

EDIT: Es scheint, es geht nicht darum, die Farbe aus der Ressource zu bekommen. Hartcodierung die Farben, wie unten auch gezeigt, gibt mir orange Text:

<TextView 
    android:id="@+id/textView9" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/dotSpace" 
    android:textAppearance="?android:attr/textAppearanceSmall" 
    android:textColor="#669900" /> 

EDIT 2: Gerade kam über Android M Developer Preview - TextView android:textColor being ignored. Könnte das mein Verhalten erklären?

BEARBEITEN 3: Wenn ich Inhalte dynamisch erzeuge, anstatt Layouts zu verwenden, werden die Farben korrekt angezeigt. Beispiel:

TextView newType = new TextView(rilLteCells.getContext()); 
    newType.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 2)); 
    newType.setTextAppearance(rilLteCells.getContext(), android.R.style.TextAppearance_Medium); 
    newType.setTextColor(rilLteCells.getContext().getResources().getColor(getColorFromGeneration(cell.getGeneration()))); 
    newType.setText(rilLteCells.getContext().getResources().getString(R.string.smallDot)); 
    row.addView(newType); 

Antwort

1

es bestimmte Ressource zugeordnet wurde.

Wo immer ich dieses Problem hatte, war der Text in der Kontrolle ein einzelnes Quadrat (U + 2b1b). Wenn ich diesen Text ändere (z. B. durch Anhängen eines X), wird nur das Quadrat in Orange angezeigt und der Rest der Zeichenfolge hat die gewünschte Farbe.

Ändern Sie es zu einem kleinen Quadrat (U + 25fc) behobenen Dinge. Einige andere Sonderzeichen würden mir andere Farben geben - anscheinend sind bestimmte Zeichen auf bestimmte Farben auf Marshmallow festgelegt, wenn sie auf früheren Versionen wie jeder andere Text gestylt werden konnten.

1

Verwenden ContextCompat Klasse, ist es Hilfsklasse für Funktionen im Kontext eingeführt, nachdem API-Ebene 4 in einer Art und Weise rückwärts kompatibel erreichbar.

accStatus.setTextColor(ContextCompat.getColor(context, R.color.somecolor)); 

public static final int getColor (Context context, int id)

        Gibt eine Farbe mit einer ID

+1

Was würde ich mit Farben machen, die ich direkt im Layout einstelle? – user149408

+0

Es wird die entsprechende Farbe von Ihrer Farbressource nehmen. –

+1

Genau das funktioniert nicht. Auch wenn ich eine Farbressource im Layout anwähle, wird sie als Orange angezeigt. – user149408

0

Konfrontiert das gleiche Problem auf meinem Sony Xperia (Android 6.0 Marshmallow). Der Grund dafür war, dass der Text Einstellungen/Eingabehilfen/Hoher Kontrast (experimentell) aktiviert war.

Wenn ich es deaktiviert habe, funktionierte es wieder wie erwartet.