2012-05-21 23 views
7

Por favor, avíseme, cómo puedo establecer el fondo predeterminado de un botón personalizado para nulo.Proporcionar un estilo predeterminado (atributos) en una vista personalizada

Sé que puedo definir un "estilo" que establezca android: background en "@null", y solicite a los usuarios que apliquen explícitamente el estilo en su diseño. Por ejemplo:

<style name="MyButton" parent="@android:style/Widget.Button"> 
    <item name="android:background">@null</item> 
</style> 

y

<com.xxx.widget.MyButton 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    style="@style/MyButton" 
    android:text="MyButton" /> 

Por encima de código está funcionando bien. Pero, ¿cómo puedo aplicar este estilo en mi clase "MyButton" internamente y permitir que los usuarios no configuren el estilo explícitamente?

Por ejemplo, cómo hacer siguiente distribución funciona como antes:

<com.xxx.widget.MyButton 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="MyButton" /> 

Traté de hacer esto en el constructor como abajo, pero no su trabajo.

public MyButton(Context context, AttributeSet attrs) { 
    this(context, attrs, com.xxx.R.style.MyButton); 
} 

PS. Quiero aplicar este fondo "nulo" cuando un usuario no establece el fondo explícitamente.

+0

creo que debería cambiar el título de tu pregunta. Siempre puedes tener un estilo predeterminado, pero eso podría cambiar más adelante. Quizás necesite decir 'estilo final' o algo por el estilo – ikbal

+1

Vea http://stackoverflow.com/questions/4493947/how-to-define-theme-style-item-for-custom-widget para obtener algunos consejos sobre esto. –

+0

Tenía un requisito similar: http://stackoverflow.com/questions/31504413/theme-style-for-custom-view/31505624#31505624 – stefan

Respuesta

0

En su constructor MyButton(), ¿por qué no llama a setBackground (null)?

0

Esto es más o menos una forma económica de hacerlo, pero ¿por qué no establecer el fondo en un cuadrado transparente. Como este ->

transparent_square.xml: (Ponlo en el directorio estirable)

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/square" 
    android:> 

    <solid android:color="#00808080"></solid> // The first two zeros set the alpha 
               // to 0 

</shape> 

A continuación, establezca el fondo del botón a su estirable.

Botón:

<Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Send" 
     android:id="@+id/sendButton" 
     android:layout_weight="1" 
     android:background="@drawable/transparent_square"/> 
Cuestiones relacionadas