¿Qué es AttributeSet y cómo puedo usarlo?

¿Qué es AttributeSet en Android?

¿Cómo puedo usarlo para mi vista personalizada?

4 Solutions collect form web for “¿Qué es AttributeSet y cómo puedo usarlo?”

AttributeSet es el conjunto de propiedades especificado en un archivo de recursos xml. No debería tener que hacer nada especial en su vista personalizada. La View(Context context, AttributeSet attrs) se llama para inicializar una vista desde un archivo de diseño. Simplemente agregue este constructor a su vista personalizada. Compruebe el ejemplo de Vista personalizada en el SDK para verlo utilizado.

Una respuesta tardía, aunque una descripción detallada, para otros.

AttributeSet (Documentos de Android)

Una colección de atributos, como se encuentra asociada con una etiqueta en un documento XML.

Básicamente, si está intentando crear una vista personalizada y desea pasar valores como dimensiones, colores, etc., puede hacerlo con AttributeSet .

Aquí está un ejemplo

Imagine que desea crear una View como la siguiente

Introduzca aquí la descripción de la imagen

Hay un rectángulo con el fondo amarillo, y un círculo dentro de él, con digamos el radio 5dp, y el fondo verde. Si quieres que tus vistas tomen los valores de los colores de fondo y el radio a través de xml, como este

 <com.anjithsasindran.RectangleView app:radiusDimen="5dp" app:rectangleBackground="@color/yellow" app:circleBackground="@color/green" /> 

Bueno, eso es donde se utiliza AttributeSet . Puede tener este archivo attrs.xml en la carpeta de valores, con las siguientes propiedades.

 <declare-styleable name="RectangleViewAttrs"> <attr name="rectangle_background" format="color" /> <attr name="circle_background" format="color" /> <attr name="radius_dimen" format="dimension" /> </declare-styleable> 

Dado que se trata de una vista, la clase java se extiende desde View

 public class RectangleView extends View { public WashingMachineView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.RectangleViewAttrs); mRadiusHeight = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_radius_dimen, getDimensionInPixel(50)); mCircleBackgroundColor = attributes.getDimensionPixelSize(R.styleable.RectangleViewAttrs_circle_background, getDimensionInPixel(20)); mRectangleBackgroundColor = attributes.getColor(R.styleable.RectangleViewAttrs_rectangle_background, Color.BLACK); } 

Así que ahora podemos usar estas propiedades en nuestro RectangleView en su diseño xml y obtendremos estos valores en el constructor RectangleView .

 app:radius_dimen app:circle_background app:rectangle_background 

Puede utilizar AttributeSet para obtener valores adicionales personalizados para la vista que defina en el xml. Por ejemplo. Hay un tutorial sobre la definición de atributos personalizados que afirma, "es posible leer los valores de la AttributeSet directamente", pero no dice cómo hacerlo realmente. Advierte, sin embargo, que si no usas atributos de estilo entonces:

  • Las referencias de recursos dentro de los valores de atributo no se resuelven
  • Los estilos no se aplican

Si desea ignorar todo el estilo atributos cosa y acaba de obtener los atributos directamente:

Example.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://www.chooseanything.org"> <com.example.CustomTextView android:text="Blah blah blah" custom:myvalue="I like cheese"/> </LinearLayout> 

Tenga en cuenta que hay dos líneas de xmlns (xmlns = XML namespace), la segunda se define como xmlns: custom. Entonces debajo de esa costumbre: myvalue está definido.

CustomTextView.java

 public CustomTextView( Context context, AttributeSet attrs ) { super( context, attrs ); String sMyValue = attrs.getAttributeValue( "http://www.chooseanything.org", "myvalue" ); // Do something useful with sMyValue } 

Cuando se crea una vista desde una disposición XML, todos los atributos de la etiqueta XML se leen del paquete de recursos y se pasan al constructor de la vista como un AttributeSet

Aunque es posible leer valores del AttributeSet directamente, hacerlo tiene algunas desventajas:

  • Referencia de recursos dentro de los valores de atributo no se resuelven
  • Los estilos no se aplican

En su lugar, pase AttributeSet para obtainStyledAttribute() . Este método devuelve la matriz de valores TypedArray que se han deferenciado y denominado.

  • ¿Cómo puedo establecer dinámicamente la posición de la vista en Android?
  • Vista personalizada de Android con los atributos personalizados
  • Android: ¿Cómo crear una vista personalizada modal?
  • Superposición de vista de aplicación de Android (HUD)
  • Cómo traer una vista al frente sin llamar bringToFront ()?
  • Error al inflar la vista de clase interna
  • La sugerencia de SearchView no funciona con un carácter
  • ¿Cómo agregar TextView en medio de pulgar SeekBar?
  • Android SurfaceView no muestra onDraw
  • ¿Hay alguna manera de controlar las vistas dentro del encabezado de NavigationView?
  • Android findViewById () en la vista personalizada
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.