2011-07-22 13 views
6

Cuando compruebo QuickContactBadge en FrameLayout, encontré código siguiente:¿Para qué sirven defStyleAttr y defStyleRes en context.obtainStyledAttributes()?

public QuickContactBadge(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 

    TypedArray a = 
     context.obtainStyledAttributes(attrs, 
       com.android.internal.R.styleable.QuickContactBadge, defStyle, 0); 

    mMode = a.getInt(com.android.internal.R.styleable.QuickContactBadge_quickContactWindowSize, 
      QuickContact.MODE_MEDIUM); 

    a.recycle(); 

    init(); 

    mBadgeBackground = getBackground(); 
} 

Realmente no captar el significado de defstyle y 0 parámetro en obtainStyledAttributes(). He buscado una referencia, pero todavía no sé para qué sirve.

Respuesta

13

El documentation lo explica con bastante claridad, ¿viste esta parte:

defStyleAttr un atributo en el tema actual que contiene una referencia a un recurso de estilo que proporciona valores por defecto para los StyledAttributes. Puede ser 0 para no buscar los valores predeterminados.

defStyleRes un identificador de recursos de un recurso de estilo que proporciona valores predeterminados para los StyledAttributes, utilizado sólo si defStyleAttr es 0 o no se puede encontrar en el tema. Puede ser 0 para no buscar los valores predeterminados.

"puede ser 0 para que no busque por defecto." Si configura esto en 0, entonces no intentará tomar valores predeterminados para los atributos de estilo. Parece un poco contra-intuitivo, ¿por qué sobrecargar este método si solo puedes pasar un 0 ... pero creo que es así para que puedas ver que no mire en defStyleAttr para los valores predeterminados pero haz dile que mire en defStyleRes para los valores predeterminados, y viceversa.

Cuestiones relacionadas