5

In benutzerdefinierte TextView Ich versuche, Wert eines Attributs text (zum Beispiel) zu erhalten.So erhalten Sie Attribute mit Namespace "Android" in benutzerdefinierten TextView

TypedArray values = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.TextView); 
String text = values.getString(com.android.internal.R.styleable.TextView_text); 

Aber ich bin immer diese Fehlermeldung:

Paket com.android.internal.R nicht vorhanden

So wie "default" Attribute von Textview abzurufen?

Antwort

1

Die internal.R-Klasse ist nicht sichtbar, so dass Sie sie nur über ihre Zugriffsmethoden lesen können und nur wenn Ihr Super-Konstruktor aufgerufen wurde.

Sehen Sie die TextView source, um zu sehen, wie es intern funktioniert.

+0

Was meinst du mit Accessor-Methoden? –

5

Wenn Sie Zugriff auf diese "Android" -Attribute haben möchten, können Sie diese "überschreiben": in Ihrer deklarationsfähigen style deklarieren z.

<attr name="android:padding"/> 

Dann können Sie leicht zu erreichen, ist es auf diese Weise:

int padding = a.getInt(R.styleable.CustomView_android_padding, -1); 

Nur für einen Rekord anwser von source code von TwoWayView Layout von Lucas Rocha umgesetzt inspiriert ist. Ich denke, es ist gutes Beispiel dafür ist zu analysieren, wie benutzerdefinierte Ansichten

+1

Ich konnte keinen anderen Weg zu diesem Ansatz finden. Alle anderen Wege hatten einige Probleme. –

0

implementieren Für die Ressource von com.android.internal.R Zugriff Sie

Resources.getSystem().getIdentifier(name, defType, defPackage) 

Die link hilfreich sein können verwenden:

+0

Ich bekomme immer 'android.content.res.Resources $ NotFoundException: String resource ID # 0x0' –