Ich machte meine benutzerdefinierte Komponente nur einige TextViews zusammen. Jetzt möchte ich in der Lage sein, meine individuelle Steuerung init direkt aus dem Code, Text vorbei Größen unabhängig für jede der TV-So lesen Sie benutzerdefinierte Dimension Attribut von Java-Code
Meine Attribute Definition:
<resources>
<declare-styleable name="BasicGauge">
<attr name="valueTextSize" format="dimension" />
<attr name="titleTextSize" format="dimension" />
<attr name="unitsTextSize" format="dimension" />
</declare-styleable>
</resources>
Beispiel Initialisierung der Komponente:
<pl.com.digita.BikeComputerUi.customviews.BasicGauge
android:id="@+id/basicGauge1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="10dp"
valueTextSize="40sp">
</pl.com.digita.BikeComputerUi.customviews.BasicGauge>
Wie ich versuche, diese Attribute im Konstruktor der Komponente zu lesen:
final int N = typedArray.getIndexCount();
for (int i = 0; i < N; i++) {
int attribute = typedArray.getIndex(i);
switch (attribute) {
case R.styleable.BasicGauge_valueTextSize:
valueTextSize = typedArray.getString(attribute);
break;
case R.styleable.BasicGauge_titleTextSize:
titleTextSize = typedArray.getString(attribute);
break;
case R.styleable.BasicGauge_unitsTextSize:
unitsTextSize = typedArray.getString(attribute);
break;
}
typedArray.recycle();
}
Problem: Nach der Erstellung sind alle meine Werte immer noch null. 40sp ist genau mein gewünschter Wert.
vor allem - vielen Dank für die Lösung meines Problems. Was ist der beste Weg, um den Dimensionswert an TextView innerhalb der Verbundkomponente zu übergeben? – piotrpo
Die Art und Weise, wie Sie es tun: Verwenden Sie ein benutzerdefiniertes Attribut, rufen Sie es während der Erstellung der zusammengesetzten Ansicht ab und übergeben Sie es dann an Ansichten, wenn es erstellt oder aufgeblasen wird. – Snicolas