Tema XML di Android che eredita da due themes di padre?

Stili e themes Android sembrano sembrare sempre la rotazione della mia testa. Volevo usare l'UI Holo in diverse versioni di Android per la mia applicazione. Così ho deciso di estrarre le risorse necessarie navigando sulla fonte.

Mi sono imbattuto in android-15\data\res\values\themes.xml e sono confuso riguardo a quello che esattamente viene 'ereditato' e da where:

  • Visualizzazione di pager con l'image di caricamento dell'image universale errore di errore
  • FloatingActionButton hide nella list scroll
  • Android come interagire con le tabs Fragment
  • Visualizzare l'elenco degli events all'interno del calendario?
  • Appcompat v21 Elevazione della barra degli strumenti pre-lollipop
  • Come aggiungere una vista programmaticamente a RelativeLayout?
  •  <style name="Theme.Holo.Light" parent="Theme.Light"> ... ... </style> 

    La guida API Android spiega:

    Se si desidera ereditare dagli stili che si sono definiti, non è necessario utilizzare l'attributo parent . Invece, prefisca il nome dello stile che si desidera ereditare al nome del nuovo stile, separato da un periodo.

    Ma dal codice sopra, sembra che Theme.Holo.Light eredita da Theme.Holo e da Theme.Light .

    Come funziona, o cosa non sto leggendo correttamente?

  • Entrata ricorsiva per eseguire le transactions di pagamento
  • Spostare lo schermo a destra sul clic del menu; come facebook
  • LocationClient vs LocationManager
  • Ottenere la posizione del cursore in Android in Modifica text?
  • Android Galaxy S4 - Attività che è visibile sullo schermo di block
  • Come get la prima visualizzazione visibile da un Android ListView
  • One Solution collect form web for “Tema XML di Android che eredita da due themes di padre?”

    Mi chiedevo anche questo, quindi ho scritto una semplice app per test per provarlo. File di risorse sembra questo:

     <!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name="AppBaseTheme" parent="android:Theme"> <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <item name="android:windowNoTitle">true</item> <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> </style> <style name="AppTheme.TestTheme" parent="android:Theme.Light"> </style> 

    Quindi applico AppTheme.TestTheme all'attività nel file manifesto. AppTheme rende la window a schermo integer e non dispone di una barra del titolo. Theme.Light fa la luce di background della window invece dell'oscurità predefinita. Quando viene specificato l'attributo parent="android:Theme.Light" , la window è bianca e non a schermo integer, significa che l'attributo parent="..." ha la precedenza sul prefisso nome e la gerarchia sembra essere TestTheme <- Theme.Light (light) <- Theme (dark) .

    Con parent = "android: Theme.Light" rimosso, lo schermo è scuro e schermo integer, quindi il TestTheme <- AppTheme (fullscreen) <- AppBaseTheme <- Theme (dark) gerarchia è in atto.

    Quando il parent="..." è specificato, non ha alcuna differenza quando elimino o no il prefisso. Così il parent="..." sembra avere una priorità assoluta. AppTheme.TestTheme non eredita da entrambi i genitori in una sola volta.

    Ora, guardando il default themes.xml, sembra che Theme.Holo.Light eredita da Theme.Light e quindi tutte le cose Holo sono specificate manualmente nella sua descrizione. Quindi la chiamarono Theme.Holo.Light non perché eredita da Holo, ma perché volevano un nome che lo descrive come "la versione leggera di Holo". E perché volevano essere confusionali.

    Questo è stato testato su Gingerbread 2.3.3.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.