Creación de estilo predeterminado con atributos personalizados

Así que aquí está mi problema: he creado un componente personalizado que extiende el Button Este botón tiene un atributo llamado testAttr .

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

Quiero crear un estilo predeterminado para este componente, así que añadí 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 usar los atributos android y el mío como este, que no funciona:

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

He establecido 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, establecí 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 cae de nuevo al estilo predeterminado por alguna razón y nunca establece los atributos de Android. Así que estoy extrañando algo aquí?

Bueno, debería haberme quedado mejor antes de hacer preguntas …

Encontró la solución:

Reemplazado esto:

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

con este:

 public myButton(final Context context, final AttributeSet attrs) { this(context, attrs, R.attr.testStyle); } 
  • Cuerdas Android dependientes del tema
  • PreferenciaLa actividad y el tema no se aplican
  • Cómo cambiar el tema de otro recurso de la aplicación en android?
  • Tema de fondo con estilos y temas
  • Android: No se puede diseñar el divisor de hilado
  • Barra de herramientas de AppCompat popupTheme no se utiliza en ShareAction MenuItem
  • ActionBarSherlock apilado barra de acción estilo problema
  • ¿Por qué mi aplicación de Android no muestra el icono y el texto en ActionBar?
  • Temas de Android: Defina colores / degradados en "baseTheme.xml", use dentro de controles, reemplace en "subThemeX.xml"
  • Atributos de altura de ActionBarSherlock en sdk bajo
  • Cómo cambiar el estilo de pestaña en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.