¿Por qué funcionan los parámetros de diseño en la programación de Android?

Primero de mis antecedentes: Soy nuevo en Java que viene de Ruby. Si eso ayuda.

Estoy confundido sobre cómo funcionan los params de diseño. Estoy siguiendo una introducción básica de Hello World a la creación de una aplicación de Android. Paso 1, amplíe la clase Activity y el método onCreate () para acceder al diseño XML. Ok, entiendo eso.

Entonces creo un diseño (digamos un RelativeLayout) en el Main.XML. Así que esto es hacer uso de la clase RelativeLayout que extiende la clase ViewGroup, ok hasta ahora. Entonces vamos a decir que creo un botón dentro de este. Aquí es donde comienza mi pregunta. Si miro el ejemplo que estoy siguiendo veo atributos que están 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 Ver. ¿Por qué un objeto de botón puede aceptar atributos para el objeto RelativeLayout? Tal vez mi programación Ruby me está confundiendo ..

¡Gracias!

Actualización: Para el bien de la posteridad: gracias a Slothsberry por señalar el enlace XML Layouts , que parece describir la respuesta claramente en 2 secciones de la sección sobre "Atributos" y en "Layout Paramters". La sección de atributos dice:

Cada objeto View y ViewGroup admite su propia variedad de atributos XML. Algunos atributos son específicos de un objeto View (por ejemplo, TextView admite el atributo textSize), pero estos atributos también son heredados por los objetos View que pueden extender esta clase. Algunos son comunes a todos los objetos de Vista, ya que son heredados de la clase de vista raíz (como el atributo id). Y, otros atributos se consideran "parámetros de diseño", que son atributos que describen determinadas orientaciones de diseño del objeto Ver, según lo define el objeto de grupo de vista principal de ese objeto.

Sin embargo, 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 ViewGroup implementa una clase anidada que extiende ViewGroup.LayoutParams. Esta subclase contiene tipos de propiedades que definen el tamaño y la posición de cada vista secundaria, según corresponda para el grupo de vistas. Como se puede ver en la figura 1, el grupo de vista padre define los parámetros de diseño para cada vista secundaria (incluido el grupo de vista secundaria).

Ellos dan un diagrama agradable también. Parece que un programador principiante necesita reconocer que mientras se hace referencia a las clases Java, el XML actúa más como una hoja CSS y que los atributos se calculan primero de manera anidada antes de ser computados y transferidos a sus homólogos de la clase Java. Ese es mi entendimiento actual de todos modos 🙂

Los parámetros de diseño no reflejan estrictamente la herencia de objetos (como habrás notado). La razón es que hay dos partes del diseño: configurar una vista y parametrizar el padre de una vista usando esa vista como un argumento.

Así que los parámetros como android: layout_below se ignorarán si el diseño de los padres no es un RelativeLayout. Podría tener sentido desde una perspectiva OOP para poner ese parámetro en el objeto RelativeLayout. Pero así es como lo harías en el código java.

En el código XML, se adopta el enfoque de que la información sobre el niño está contenida en el niño. Los parámetros de diseño que requieran que un padre no esté presente se ignorarán cuando se infle el diseño. Es un buen sistema Android que hace que el XML sea más legible y portátil. Y no se refiere estrictamente a la estructura del paquete de clase, sino más bien a la forma intuitiva en que los humanos piensan colocar las cosas en un diseño.

Todos los elementos de diseño de android heredan de View, aunque muchos indirectamente.

La clase View genérica tiene propiedades (atributos) apropiadas para CUALQUIER elemento de diseño visible. Para el diseño de raíz, algunas propiedades tales como gravedad de diseño, dimensiones de diseño, etc. son establecidas por el sistema (en la mayoría de los casos creo).

Si mi diseño de la raíz es un poco de diseño lineal, Android me permitirá tener un diseño relativo de ser un niño en la raíz. Android me permitirá establecer varias propiedades de diseño en el elemento anidado, con el fin de controlar cómo se procesa. Esto funciona igual para Button y cualquier otro diseño de Android.

Si no te importa una propiedad en particular, no la estableces. Están presentes para permitirte controlar las pantallas de tu aplicación. Examine los diseños XML o las vistas de Hello para comenzar los detalles.

Usted está un poco confundido, ese parámetro de diseño no posee un objeto XML en particular. Si lo pone en un niño XML XXXView o XXXLAyout, entenderá que su lado derecho debe estar en el mismo lugar que el padre a la derecha.

Entonces si usted no crea los params de la disposición para ese niño, el niño intentaría heredar uno de sus padres.

  • Cómo tomar una instantánea de la aplicación de pantalla no sólo en Android con código
  • detectar oscilaciones a izquierda y derecha en Android (onFling y OnGestureListener)
  • Convex Hull en Java Android Opencv 2.3
  • No se pudo escribir el volcado de núcleo. Minidumps no están habilitados de forma predeterminada en las versiones de cliente de Windows en Eclipse
  • Reproducir un archivo m3u8 local en android mostrando setDataSourceFD failed .: status = 0x80000000
  • Cómo convertir una fecha dd / mm / aaaa a aaaa-MM-dd HH: mm: ss Android
  • Cómo eliminar elementos de arraylist genérico en Android (Java)
  • El permiso personalizado de Android falla según el pedido de instalación de la aplicación
  • ¿Es posible detectar la salida de una aplicación?
  • java / error de análisis. intentando enviar desde android sdk a Parse
  • Cómo cambiar la opacidad de un mapa de bits?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.