2012-05-17 21 views
8

Tengo una vista personalizada que amplía una de las clases de marco. La mayoría de los View s en Android tienen definidos algunos atributos predeterminados (como Button que se puede hacer clic, que se configura mediante android:clickable="true").Android: atributos predeterminados para vistas personalizadas

¿Cómo proporciono los valores predeterminados de toda la aplicación para mi vista personalizada?

+0

http://stackoverflow.com/questions/2695646/declaring-a-custom-android-ui-element-using-xml – Ixx

+0

No estoy preguntando acerca de cómo definir atributos personalizados. Ya hago eso. Lo que quiero es definir ** predeterminados ** para esos atributos, de modo que la vista se pueda agregar a un archivo de diseño sin tener que establecer algunas propiedades adicionales. – Karakuri

Respuesta

12

he resuelto mi problema de esta manera:

res/valores/attrs.xml:

<resources> 
    <attr name="customViewStyle" type="reference" /> 
</resources> 

res/valores/styles.xml:

<resources> 
    <style name="AppTheme" parent="@android:style/Theme.Light"> 
     <item name="android:background">@drawable/bg_light</item> 
     <item name="customViewStyle">@style/CustomView</item> 
    </style> 

    <style name="CustomView"> 
     <item name="android:clickable">true</item> 
     <item name="android:focusable">true</item> 
     <item name="android:focusableInTouchMode">true</item> 
    </style> 
</resources> 

Entonces todo lo que haces es establecer el tema en el manifiesto para AppTheme. Esto también funciona con widgets estándar usando android:[widget]Style en lugar de customViewStyle en la definición de AppTheme.

+2

¿Cómo se aplica esto a su vista? Donde se customViewStyle vinculada a su vista de la implementación? – cottonBallPaws

+1

@cottonBallPaws, los siguientes me señalaron en la dirección correcta: http://stackoverflow.com/a/31505624/5166250 – Travis

1

También puede crear un estilo para este diseño y establecer el estilo donde utiliza la vista.

fuente: http://developer.android.com/guide/topics/resources/style-resource.html

+2

Usar la etiqueta de estilo es solo un atajo para configurar la configuración de atributos individuales en el archivo de diseño; eso no es lo que estoy tratando de lograr. Quiero tener algunas apariencia/atributos por defecto, y luego quienquiera que esté usando mi vista personalizada puede usar la etiqueta de estilo para modificarla. creo que de esta manera: Cuando se agrega un TextView a un diseño, éste tiene valores por defecto para el tamaño del texto, color de texto, etc. Aquellos tiene que venir de alguna parte, porque no tiene que especificar un estilo o nada. Los atributos que modifique o el estilo al que haga referencia se aplicarán sobre esos valores predeterminados. – Karakuri

0

Creo que tendrá que reemplazar las Ver constructores que toman un argumento AttributeSet, y construir su propia AttributeSet modificado para pasar al constructor de la superclase.

EDITAR: Incluso el facilitador, simplemente haga que su constructor de subclase de vista llame al setClickable etc. para cambiar los valores predeterminados a lo que desee.

+3

Esto es lo que hice originalmente. El problema es, si otro desarrollador utiliza mi vista personalizada y pone hacer clic = "falso" en su xml, entonces mi llamada a 'setClickable()' socava su programación. (Tal vez se planea que sea se puede hacer clic sólo después de que el usuario haya hecho algo, como una casilla marcada.) Aunque ** I ** esperar que se pueda hacer clic, otros no, así que me gustaría proporcionar alguna por defecto comportamiento sin tener que recurrir a las llamadas internas por el estilo. De lo contrario, necesito una forma de leer todos los atributos de la vista, no solo los personalizados que he definido en attrs. – Karakuri

Cuestiones relacionadas