Primero en mi experiencia: soy nuevo en Java viniendo de Ruby. Si eso ayuda¿Por qué los parámetros de diseño funcionan en la Programación de Android?
Estoy confundido acerca de cómo funcionan los parámetros de diseño. Estoy siguiendo una introducción básica de Hello World para crear una aplicación de Android. Paso 1, amplíe la clase de actividad y el método onCreate() para acceder al diseño XML. Ok, entiendo eso.
Luego creo un diseño (por ejemplo, un RelativeLayout) en Main.XML. Así que esto está haciendo uso de la clase RelativeLayout que extiende la clase ViewGroup, ok hasta ahora. Entonces digamos que creo un botón dentro de esto. Aquí es donde comienza mi pregunta. Si miro el ejemplo que estoy siguiendo, veo atributos asignados al botón que pertenece a la clase RelativeLayout (es decir: android: layout_alignParentRight = "true"). Estos parecen ser los params de diseño. Pero, ¿por qué funciona esto? La clase de botón parece heredar de la clase View. ¿Por qué un objeto de botón puede aceptar atributos para el objeto RelativeLayout? Tal vez mi programación de Ruby me está confundiendo ...
¡Gracias!
Actualización: Por posteridad: gracias a Slothsberry por señalar el enlace XML Layouts, que parece describir claramente la respuesta en 2 secciones en la sección de "Atributos" y en "Parámetros de diseño". La sección de atributos dice:
Todos los objetos View y ViewGroup admiten su propia variedad de atributos XML . Algunos atributos son específicos de un objeto View (para el ejemplo , TextView admite el atributo textSize), pero estos atributos también se heredan por cualquier objeto View que pueda ampliar esta clase . Algunos son comunes a todos los objetos de Vista, porque se heredan de la clase de vista de raíz (como el atributo id). Y, otros atributos se consideran "parámetros de diseño", que son los atributos que describen ciertas orientaciones de diseño del objeto Ver, como definido por el objeto ViewGroup principal de ese objeto.
La sección de parámetros de diseño es quizás la sección que realmente responde a esta pregunta. Donde dice:
Cada clase de ViewGroup implementa una clase anidada que extiende ViewGroup.LayoutParams. Esta subclase contiene tipos de propiedad que definen el tamaño y la posición para cada vista secundaria, según corresponda para el grupo de vista. Como se puede ver en la figura 1, el grupo de vista principal define los parámetros de diseño para cada vista secundaria (incluido el grupo de vista secundario).
Dan un buen diagrama también. Parece que un programador principiante necesita reconocer que, aunque se hace referencia a las clases de Java, el XML actúa más como una hoja de CSS y los atributos se computan primero de forma anidada antes de calcularse y trasladarse a sus contrapartes de la clase Java. Esa es mi comprensión actual de todos modos :)
No, tienes razón en pensar que esto es extraño. He estado programando en Java durante más de 5 años, y esto es algo que cuando lo vi por primera vez no tenía sentido para mí. Todavía no estoy seguro de por qué funciona así. Esperemos que obtengamos una respuesta. –
https://developer.android.com/reference/android/view/View.html#Layout – samosaris