2014-12-28 8 views
9

Ho avviato un progetto con Android Lollipop (21) e creato una visualizzazione personalizzata. Quando ho generato i costruttori per la vista, ho ottenuto un nuovo 4 ° costruttore che richiede più parametri rispetto agli altri.Perché abbiamo bisogno di un quarto costruttore per Lollipop?

La mia domanda è, perché ne abbiamo bisogno? Cosa succederebbe se rimuovessi questo costruttore e avvii l'app su Lollipop?

+0

vedere https://stackoverflow.com/questions/9195713/do-i-need-all-three-constructors-for-an-android-custom-view –

+0

Non è necessario e niente accadrà se lo rimuovi (vedi commento precedente). Esiste nelle viste predefinite in modo da poter passare una risorsa di stile predefinita (vedere la risposta a: documenti di seguito). – alanv

+0

perché qualcuno dovrebbe volerlo fare? – mbonnin

risposta

2

informazioni da official doc

pubblica View (contesto contesto, AttributeSet attrs, int defStyleAttr, int defStyleRes)

Aggiunto a livello di API 21

Eseguire l'inflazione da XML e applicare una classe -specifico stile di base da un attributo di tema o una risorsa di stile. Questo costruttore di View consente alle sottoclassi di utilizzare il proprio stile di base quando si gonfiano.

Nel determinare il valore finale di un attributo particolare, ci sono quattro ingressi che entrano in gioco:

  1. I valori di attributo nella proposta AttributeSet.
  2. La risorsa di stile specificata in AttributeSet (denominato "stile").
  3. Lo stile predefinito specificato da defStyleAttr.
  4. Lo stile predefinito specificato da defStyleRes.
  5. I valori di base in questo tema.

Ciascuno di questi ingressi è considerato in ordine, con il primo elencato che ha la precedenza su quelli seguenti. In altre parole, se nel set di attributi fornito, quindi , il testo del pulsante sarà sempre nero, indipendentemente da ciò che è specificato in uno qualsiasi degli stili.

Parametri

  • contesto Il contesto della vista è in esecuzione in, attraverso la quale si può accedere al tema corrente, risorse, ecc
  • attrs gli attributi del tag XML che sta gonfiando la vista.
  • defStyleAttr Un attributo nel tema corrente che contiene un riferimento a una risorsa di stile che fornisce i valori predefiniti per la vista . Può essere 0 per non cercare i valori predefiniti.
  • defStyleRes Un identificatore di risorsa di una risorsa di stile che fornisce valori predefiniti per la vista, utilizzato solo se defStyleAttr è 0 o non è possibile trovare nel tema. Può essere 0 per non cercare i valori predefiniti.