2011-05-08 18 views
5

Estoy creando un botón en una actividad:¿Cómo extiendo el estilo de un botón?

Button contactButton = new Button(this, null, R.style.ContactButton); 
contactButton.setText(contactName); 
contactsView.addView(contactButton); 

Con el estilo correspondiente:

<style name="ContactButton" parent="@android:style/Widget.Button"> 
</style> 

que estoy tratando de conseguir que se utilice el estilo ContactButton, extendiendo el estilo Widget.Button , para que pueda mantener las propiedades de estilo en un solo lugar sin tener que redefinir todo el botón (9-patch background et al.)

Sin embargo, no encuentro ninguna forma de heredar el estilo de botón predeterminado. El resultado de lo anterior siempre parece ser un TextView predeterminado.

El más cercano que tengo es pasar el buttonStyle al constructor Button, que me devuelve la mirada botón por defecto, pero por supuesto no puedo anular esta manera:

Button contactButton = new Button(this, null, android.R.attr.buttonStyle); 

Así, alguna idea de cómo ¿para lograr esto?

Actualización:

Esto parece ser un bug in the View class, lo que explica por qué new Button(this, null, android.R.attr.buttonStyle) obras y new Button(this, null, android.R.style.Widget_Button) no es así, aunque el primero es sólo una referencia a este último.

Solo me encuentro con este error porque estoy creando los botones programáticamente, establecer el atributo style en XML funciona bien.

Todavía me gustaría saber si hay una solución simple que todavía me permita usar el sistema de estilo.

+0

¿Ha intentado inflar el botón de XML en lugar de crearlo pragmáticamente? – schwiz

+0

¿Encontró una solución? –

Respuesta

-1

¿Puedes crear una clase de fábrica y que te devuelva nuevas instancias de un objeto redefinido?

Class ButtonFactory(){ 
    public Button getStyledButton(String name){ 
     Button styledButton = new Button(); 
     styledButton.setText(name); 
     // do stuff to button 
     return styledButton 
    } 
} 

Agregue esto en Su actividad.

onCreate(..){ 
    ButtonFactory builder = new ButtonFactory(); 
    Button styledButton = builder.getStyledButton(); 
} 
+0

Sí, la modificación de la instancia del botón funciona directamente, pero espero usar el sistema de estilos para mantenerlo bien separado. – Anotherdroid

Cuestiones relacionadas