2012-08-22 29 views
11

Así que aquí está mi problema: He creado un componente personalizado que amplía el Button Este botón tiene un atributo llamado testAttr.Creación de estilo predeterminado con atributos personalizados

<declare-styleable name="TestButton" parent="@android:style/Widget.Button"> 
    <attr name="testAttr" format="reference|color"/> 
</declare-styleable> 

que desea crear un estilo por defecto para este componente por lo que añade esto:

<declare-styleable name="TestTheme"> 
    <attr name="testStyle" format="reference"/> 
</declare-styleable> 

<style name="Theme.AppTheme" parent="@android:style/Theme" > 
    <item name="testStyle">@style/test</item> 
</style> 

El problema es que quiero utilizar ambos atributos android y mi propia como éste, que no es de trabajo:

<style name="test" parent="@android:style/Widget.Button"> 
    <item name="android:background">#FF0000</item> 
    <item name="testAttr">testText</item> 
</style> 

puse los estilos por defecto en mi componente personalizado de la siguiente manera:

public myButton(final Context context) { 
    this(context, null); 
} 

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.styleable.TestTheme_testStyle); 
} 

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

    final TypedArray array = context.obtainStyledAttributes(
      attrs, 
      R.styleable.TestButton, 
      defStyle, 
      R.style.testDefault); 
     final String s = array.getString(R.styleable.TestButton_testAttr); 
     setText(s); 
     array.recycle(); 
} 

y por supuesto que para fijar el tema en el manifiesto:

<uses-sdk 
    android:minSdkVersion="7" 
    android:targetSdkVersion="15" /> 

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.AppTheme" > 

    <activity 
     android:name=".TestActivity" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 


</application> 

Siempre en verano al estilo predeterminado por alguna razón y nunca se pone los atributos androide. ¿Me estoy perdiendo algo aquí?

+0

I estoy haciendo algo similar AQUÍ !!! http://stackoverflow.com/questions/17103894/overriding-referenced-style-attributes – toobsco42

Respuesta

13

Bueno, yo debería haber visto mejor antes de hacer preguntas ...

encontrado la solución:

reemplazado esto:

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.styleable.TestTheme_testStyle); 
} 

con esto:

public myButton(final Context context, final AttributeSet attrs) { 
    this(context, attrs, R.attr.testStyle); 
} 
Cuestiones relacionadas