2014-12-28 8 views
9

Rozpocząłem projekt kierowany na Androida Lollipop (21) i utworzyłem niestandardowy widok. Kiedy generowałem konstruktory dla widoku, otrzymałem nowy czwarty konstruktor, który pobiera więcej parametrów niż pozostałe.Dlaczego potrzebujemy czwartego konstruktora dla Lollipopa?

public class FooView extends FrameLayout { 
    public FooView(Context context) { 
    super(context); 
    } 

    public FooView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    public FooView(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    } 

    // This 4th constructor 
    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    public FooView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { 
    super(context, attrs, defStyleAttr, defStyleRes); 
    } 
} 

Moje pytanie brzmi, dlaczego jest nam potrzebna? Co by się stało, gdy usunę ten konstruktor i uruchomię aplikację na Lollipop?

+0

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

+0

Nie trzeba go i nic stanie się, jeśli go usuniesz (patrz poprzedni komentarz). Istnieje on w domyślnych widokach, dzięki czemu można przekazać domyślny zasób stylów (patrz odpowiedź na poniższe dokumenty:). – alanv

+0

dlaczego ktoś chciałby to zrobić? – mbonnin

Odpowiedz

2

Informacje z official doc

widok publiczny (kontekst kontekst, AttributeSet attrs, int defStyleAttr, int defStyleRes)

Dodane w poziomie API 21

Wykonaj inflacji z XML i zastosować klasę specyficzny styl bazowy z atrybutu motywu lub zasobu stylu. Ten konstruktor widoku pozwala podklasom używać własnego stylu bazowego podczas nadmuchiwania.

Przy ustalaniu ostatecznej wartości danego atrybutu, istnieje cztery wejścia, które wchodzą w grę:

  1. Wszelkie wartości atrybutów w danym AttributeSet.
  2. Zasób stylów określony w AttributeSet (o nazwie "style").
  3. Domyślny styl określony przez defStyleAttr.
  4. Domyślny styl określony przez defStyleRes.
  5. Podstawowe wartości w tym motywie.

Każde z tych wejść jest traktowane jako zgodne z kolejnością, z pierwszym na liście mającym pierwszeństwo przed następującymi. Innymi słowy, jeśli w dostarczonym Atrybucie pod warunkiem, że tekst przycisku będzie zawsze czarny, niezależnie od tego, co jest określone w dowolnym stylu.

Parametry

  • kontekście kontekście pogląd jest uruchomiony, dzięki którym może uzyskać dostęp do aktualnego tematu, zasobów itp
  • attrs atrybuty znacznika XML, który jest pompowania widoku.
  • defStyleAttr Atrybut w bieżącym motywie zawierający odniesienie do zasobu stylu, który dostarcza wartości domyślne dla widoku . Może być 0, aby nie szukać wartości domyślnych.
  • defStyleRes Identyfikator zasobu zasobu stylu, który dostarcza wartości domyślne dla widoku, używany tylko wtedy, gdy defStyleAttr jest 0 lub nie można znaleźć w motywie . Może być 0, aby nie szukać wartości domyślnych.