Was ist AttributeSet in Android?
Wie kann ich es für meine benutzerdefinierte Ansicht verwenden?
android
attributes
view
Premier
quelle
quelle
Antworten:
Eine späte Antwort, obwohl eine detaillierte Beschreibung, für andere.
AttributeSet (Android Docs)
Grundsätzlich können Sie dies tun, wenn Sie versuchen, eine benutzerdefinierte Ansicht zu erstellen, und Werte wie Abmessungen, Farben usw. übergeben möchten
AttributeSet
.Hier ist ein Beispiel
Stellen Sie sich vor, Sie möchten
View
unten ein "Gefällt mir" erstellenEs gibt ein Rechteck mit gelbem Hintergrund und einen Kreis mit einem Radius von beispielsweise 5 dp und grünem Hintergrund. Wenn Sie möchten, dass Ihre Ansichten die Werte der Hintergrundfarben und des Radius über XML wie folgt übernehmen:
<com.anjithsasindran.RectangleView app:radiusDimen="5dp" app:rectangleBackground="@color/yellow" app:circleBackground="@color/green" />
Nun, dort
AttributeSet
wird es verwendet. Sie können diese Dateiattrs.xml
im Werteordner mit den folgenden Eigenschaften haben.<declare-styleable name="RectangleViewAttrs"> <attr name="rectangle_background" format="color" /> <attr name="circle_background" format="color" /> <attr name="radius_dimen" format="dimension" /> </declare-styleable>
Da dies eine Ansicht ist, erstreckt sich die Java-Klasse von
View
public class RectangleView extends View { public RectangleView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.RectangleViewAttrs); mRadiusHeight = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_radius_dimen, getDimensionInPixel(50)); mCircleBackgroundColor = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_circle_background, getDimensionInPixel(20)); mRectangleBackgroundColor = attributes.getColor(R.styleable.RectangleViewAttrs_rectangle_background, Color.BLACK); attributes.recycle() } }
Jetzt können wir diese Eigenschaften für unser
RectangleView
XML-Layout verwenden und diese Werte imRectangleView
Konstruktor abrufen .app:radius_dimen app:circle_background app:rectangle_background
quelle
getDimensionInPixel(50)
?Mit AttributeSet können Sie zusätzliche benutzerdefinierte Werte für Ihre Ansicht abrufen, die Sie in der XML definieren. Zum Beispiel. Es gibt ein Tutorial zum Definieren von benutzerdefinierten Attributen, in dem es heißt: "Es ist möglich, Werte direkt aus dem AttributeSet zu lesen." Es warnt jedoch davor, dass wenn Sie keine gestalteten Attribute verwenden, dann:
Wenn Sie das gesamte gestaltete Attribut ignorieren und die Attribute direkt abrufen möchten:
example.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://www.chooseanything.org"> <com.example.CustomTextView android:text="Blah blah blah" custom:myvalue="I like cheese"/> </LinearLayout>
Beachten Sie, dass es zwei Zeilen mit xmlns gibt (xmlns = XML-Namespace), die zweite ist als xmlns definiert: custom. Dann wird unter diesem Brauch: myvalue definiert.
CustomTextView.java
public CustomTextView( Context context, AttributeSet attrs ) { super( context, attrs ); String sMyValue = attrs.getAttributeValue( "http://www.chooseanything.org", "myvalue" ); // Do something useful with sMyValue }
quelle
AttributeSet ist der Satz von Eigenschaften, die in einer XML-Ressourcendatei angegeben sind. Sie sollten in Ihrer benutzerdefinierten Ansicht nichts Besonderes tun müssen. Der
View(Context context, AttributeSet attrs)
wird aufgerufen, um eine Ansicht aus einer Layoutdatei zu initialisieren. Fügen Sie diesen Konstruktor einfach Ihrer benutzerdefinierten Ansicht hinzu. Sehen Sie sich das Beispiel für die benutzerdefinierte Ansicht im SDK an, um zu sehen, ob es verwendet wird.quelle
android-sdk\samples\android-17\ApiDemos\src\com\example\android\apis\view
Wenn eine Ansicht aus einem XML-Layout erstellt wird, werden alle Attribute im XML-Tag aus dem Ressourcenpaket gelesen und als Konstruktor an den Konstruktor der Ansicht übergeben
AttributeSet
Obwohl es möglich ist, Werte
AttributeSet
direkt aus dem zu lesen , hat dies einige Nachteile:Gehen Sie stattdessen
AttributeSet
zuobtainStyledAttribute()
. Diese Methode gibt einTypedArray
Array von Werten zurück, die verzögert und formatiert wurden.quelle