2012-04-05 12 views
0

Ich habe eine benutzerdefinierte TextView und ich möchte im Konstruktor herausfinden, ob eine bestimmte XML-Eigenschaft im entsprechenden XML-Layout deklariert wurde oder nicht.Wie kann man wissen, ob eine XML-Eigenschaft definiert wurde?

<com.stuff.CustomTextView 
    android:id="@+id/tv01" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="8sp" /> 

public CustomTextView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // find out if textSize was defined 
    if (!wasAttributeDefined(attrs,"textSize")) // EDIT 
    setTextSize(10); // EDIT 
} 

Ich weiß nicht, ob dies gültig ist, aber ich habe versucht, den folgenden (ohne Glück):

attrs.getAttributeFloatValue("android","textSize",(float)-1.0); 

Dank.

EDIT:

gut, wenn jemand interessiert ist, gibt es einen (wahrscheinlich nicht so gut) Weg, dies zu lösen. someting wie:

private boolean wasAttributeDefined(AttributeSet attrs, String name) { 
    for (int i=0; i<attrs.getAttributeCount(); i++) 
     if (attrs.getAttributeName(i).equals(name)) 
      return true; 
    return false; 
} 
+0

Haben Sie Ihr Log platziert? Fehler bekommen? –

+0

keine Fehler. Ich habe nur den Standardwert (-1.0) bekommen, obwohl ich in der XML-Datei android: textSize definiert habe. – takecare

Antwort

0

sollten Sie testen Sie Ihr Attribut mit so etwas wie:

R.id.tv01.attr.textSize

+0

was ist das ....? – waqaslam

+0

Dies gibt Ihnen den Wert im Attribut Android: textSize des Widgets mit der ID tv01 – Manitoba

+0

die Sache ist, möchte ich wissen, wenn die Eigenschaft deklariert wurde (in der XML) jedes Mal, wenn eine "neue" CustomTextView kommt, im Konstruktor, nicht für einen einzelnen/spezifischen. – takecare

Verwandte Themen