Wiem, że można stworzyć niestandardowy element UI (za pomocą View lub określonego rozszerzenia elementu UI). Ale czy można zdefiniować nowe właściwości lub atrybuty dla nowo utworzonych elementów interfejsu użytkownika (mam na myśli nie dziedziczone, ale zupełnie nowe, aby zdefiniować określone zachowanie, którego nie jestem w stanie obsłużyć z domyślnymi właściwościami lub atrybutami)
np. element mój element niestandardowy:
<com.tryout.myCustomElement
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Element..."
android:myCustomValue=<someValue>
/>
Czy można więc zdefiniować MyCustomValue ?
Dzięki
android
custom-controls
Punkt orientacyjny
źródło
źródło
Odpowiedzi:
Tak. Krótki przewodnik:
1. Utwórz atrybut XML
Utwórz w środku nowy plik XML
/res/values/attrs.xml
z atrybutem i jego typemZasadniczo musisz skonfigurować jeden
<declare-styleable />
dla swojego widoku, który zawiera wszystkie atrybuty niestandardowe (tutaj tylko jeden). Nigdy nie znalazłem pełnej listy możliwych typów, więc myślę, że musisz poszukać źródła. Typy, które znam, to odwołania (do innego zasobu), kolor, wartość logiczna, wymiar, liczba zmiennoprzecinkowa, liczba całkowita i łańcuch . Są dość oczywiste2. Użyj atrybutów w swoim układzie
Działa to tak samo, jak powyżej, z jednym wyjątkiem. Twój atrybut niestandardowy wymaga własnej przestrzeni nazw XML.
Całkiem proste.
3. Skorzystaj z przekazanych wartości
Zmodyfikuj konstruktora widoku niestandardowego, aby przeanalizować wartości.
distanceExample
w tym przykładzie jest prywatną zmienną składową.TypedArray
ma wiele innych rzeczy do analizowania innych typów wartości.I to wszystko. Użyj przeanalizowanej wartości w swoim,
View
aby ją zmodyfikować, np. Użyj jej,onDraw()
aby odpowiednio zmienić wygląd.źródło
http://schemas.android.com/apk/res-auto
podczas deklarowania niestandardowej przestrzeni nazwString initialText = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "initialText");
gdzie attr to zestaw atrybutów przekazywany w konstruktorze, a „initialText” to nazwa atrybutu niestandardowegoW folderze res / values utwórz attr.xml. Tam możesz zdefiniować swoje atrybuty:
Jeśli chcesz użyć go w pliku układu, musisz dodać
a następnie możesz użyć wartości z
customname:myCustomValue=""
źródło
Tak, po prostu użyj
<resource>
tagu.lubię to:
link z oficjalnej strony internetowej
źródło