2017-08-28 3 views
1

Wie erhalten Sie den tatsächlichen Wert einer referenzierten Farbe. In einem Layout kann ich die folgende verwenden ...Wie programmgesteuert den Wert von integrierten Ressourcen wie colorAccent erhalten?

android:textColor="?android:attr/colorAccent" 

..und das funktioniert in der Textfarbe eines Textview zu dem Thema definiert Akzentfarbe einstellen. Wie bekomme ich den Wert von colorAccent mit Code zur Laufzeit?

Wie finden Sie auch eine Liste aller verfügbaren Werte, es muss eine lange Liste verfügbarer Farben geben, die ich bekommen konnte, aber wo ist diese Liste definiert?

Antwort

1

Wenn die Ressource ist ein Android eine definiert:

var id = Android.Resource.Attribute.ColorAccent; 

Wenn die Ressource in einem Dialog, Widget ist, etc .. das ist keine Android-System-Ressource (dh eine DatePickerDialog Ressource)

var id = SomeDatePickerDialog.Resources.GetIdentifier("date_picker_header_date", "id", "android"); 

Unter Verwendung der erhaltenen ID zu erhalten:

var typedArray = Theme.ObtainStyledAttributes(new int[] { id }); 
    var color = typedArray.GetColor(0, int.MaxValue); 
    if (color != int.MaxValue) 
    { 
     Log.Debug("COLOR", color.ToString()); 
    } 

Die R Liste ändert sich mit API/Themen, für die Grundwerte zur Verfügung:

Aber für eine vollständige Referenz Sie die Sie suchen auf der Android-Quelle für die API verwenden:

So sind die Farben, die in den Oreo beta definiert sind :

Dann schauen Sie in die spezifische Farbe XML-Datei für die wie es definiert ist und verwenden Sie diese Definition, um den tatsächlichen Wert davon zu finden (in einem auf die WertXXX-Dateien ....)

2

Für das Beispiel haben Sie Sie diesen Wert mit so etwas wie diese bekommen:

//default color instead the attribute is not set. 
var color = Color.Blue; 

var attributes = new int[] { Android.Resource.Attribute.ColorAccent }; 
var typeArray = ObtainStyledAttributes(attributes); 

//get the fist item (we are sending only one) and passing 
//the default value we want, just in case. 
var colorAccent = typeArray.GetColor(0, color); 

colorAccent die Color Satz in Ihrem Theme für den Wert haben ColorAccent Attribut, wenn eine oder die Standardeinstellung.

Wichtig zu erwähnen, dass diese Methode ObtainStyledAttributes Teil einer Context ist, also wenn Sie bereits in einer Aktivität sind, werden Sie es als Teil davon finden, aber wenn Sie in einer anderen Klasse sind, müssen Sie den Kontext im Fall übergeben es ist nicht verfügbar.

Für die vollständige Liste der verfügbaren Werte können Sie es aus der Android.Resource.Attribute Klasse erhalten. In VS machen Sie eine Inspektion, um die verschiedenen Eigenschaften dieser Klasse zu sehen. Vielleicht hat Android-Dokumentation einen besseren Weg.

Hope this helps.-

Verwandte Themen