Prima di tutto il mio background: sono nuovo di Java che viene da Ruby. Se ciò aiuta.Perché i parametri di layout funzionano nella Programmazione Android?
Sono confuso su come funzionano i parametri di layout. Sto seguendo una presentazione base di Hello World per la creazione di un'app Android. Passaggio 1, estendere la classe Attività e il metodo onCreate() per accedere al layout XML. Ok, lo capisco.
Poi creare un layout (diciamo un RelativeLayout) nella main.xml. Quindi questo sta facendo uso della classe RelativeLayout che estende la classe ViewGroup, ok finora. Quindi diciamo che creo un pulsante all'interno di questo. È qui che inizia la mia domanda. Se guardo l'esempio che sto seguendo, vedo gli attributi assegnati al pulsante che appartengono alla classe RelativeLayout (ad es .: android: layout_alignParentRight = "true"). Questi sembrano essere i parametri di layout. Ma perché funziona? La classe del pulsante sembra ereditare dalla classe View. Perché un oggetto pulsante può accettare attributi per l'oggetto RelativeLayout? Forse la mia programmazione Ruby mi confonde ..
Grazie!
Aggiornamento: Per amor di poster: grazie a Slothsberry per indicare il collegamento XML Layouts, che sembra descrivere chiaramente la risposta in 2 sezioni la sezione "Attributi" e su "Parametri di layout". La sezione attributi legge:
ogni vista e l'oggetto ViewGroup supporta la propria gamma di XML attributi. Alcuni attributi sono specifici per un oggetto View (per esempio, TextView supporta l'attributo textSize), ma questi attributi sono anche ereditate da qualsiasi vista oggetti che possono estendersi questa classe . Alcuni sono comuni a tutti gli oggetti View, perché sono ereditati dalla classe View View (come l'attributo id), . E, altri attributi sono considerati "i parametri di layout", che sono attributi che descrivono certi orientamenti di layout dell'oggetto vista, come definite dalla oggetto principale ViewGroup di quell'oggetto.
La sezione dei parametri di layout è forse la sezione che risponde veramente a questa domanda. Dove si afferma:
classe Ogni ViewGroup implementa una classe annidata che si estende ViewGroup.LayoutParams. Questa sottoclasse contiene i tipi di proprietà che definiscono la dimensione e la posizione per ogni vista secondaria, come appropriato per il gruppo di viste . Come si può vedere nella figura 1, il gruppo di viste padre definisce i parametri di layout per ogni vista figlio (incluso il gruppo di viste figlio ).
Danno anche un bel diagramma. Sembra che un programmatore principiante debba riconoscere che mentre le classi Java sono referenziate, l'XML agisce più come un foglio CSS e che gli attributi vengono prima calcolati in modo annidato prima di essere calcolati e trasferiti alle loro controparti di classe Java. Questa è la mia attuale comprensione in ogni modo :)
No, hai ragione di pensare che sia strano. Ho programmato in Java da oltre 5 anni, e questo è qualcosa che quando ho visto per la prima volta non aveva senso per me. Non sono ancora sicuro del perché funzioni così. Spero che otterremo una risposta. –
https://developer.android.com/reference/android/view/View.html#Layout – samosaris