Dobrze zaprojektowany widok niestandardowy jest jak inne dobrze zaprojektowane zajęcia. Zawiera on określony zestaw ma prosty interfejs, wydajnie korzysta z procesora oraz pamięci i tak dalej. W oprócz bycia dobrze zaprojektowana klasa, widok niestandardowy musi:
- Zgodność ze standardami Androida.
- Podaj niestandardowe atrybuty z możliwością zmiany stylu, które działają w układach XML na Androida.
- Wysyłaj zdarzenia dotyczące ułatwień dostępu.
- Zadbaj o zgodność z wieloma platformami Androida.
Platforma Androida udostępnia zestaw klas podstawowych i tagów XML ułatwiających utworzenie widoku, który spełnia wszystkie te kryteria . Z tej lekcji dowiesz się, jak wykorzystać platformę Androida do stworzenia podstawowej funkcjonalność widoku zajęcia.
Dodatkowe informacje na temat informacje o komponentach widoku niestandardowego.
Podklasy widoku danych
Wszystkie klasy widoku zdefiniowane w platformie Androida są rozszerzane
    View Twoje
    za pomocą widoku niestandardowego
    rozszerzenie View bezpośrednio lub
    zaoszczędzić czas, wydłużając
    istniejący widok
    i podklasy, takie jak Button.
Aby umożliwić Android Studio interakcję z widokiem, musisz udostępnić co najmniej konstruktor, który
Context i obiekt AttributeSet jako parametry.
Ten konstruktor umożliwia edytorowi układu tworzenie i edytowanie instancji widoku.
Kotlin
class PieChart(context: Context, attrs: AttributeSet) : View(context, attrs)
Java
class PieChart extends View { public PieChart(Context context, AttributeSet attrs) { super(context, attrs); } }
Zdefiniuj atrybuty niestandardowe
Aby dodać do interfejsu wbudowany element View, podaj go w elemencie XML i
kontrolować
na ich wygląd i działanie za pomocą atrybutów elementów. Możesz też dodać niestandardowe elementy zamówienia i określić ich styl
za pomocą języka XML. Do
włącz to działanie w widoku niestandardowym, wykonaj te czynności:
- Zdefiniuj atrybuty niestandardowe widoku w elemencie zasobu <declare-styleable>.
- Określ wartości atrybutów w układzie XML.
- Pobieranie wartości atrybutów w czasie działania.
- Zastosuj pobrane wartości atrybutów do widoku.
W tej sekcji omówiono definiowanie atrybutów niestandardowych i określanie ich wartości. W następnej sekcji omawiamy: pobierania i stosowania wartości w czasie działania.
Aby zdefiniować atrybuty niestandardowe, dodaj do projektu zasoby (<declare-styleable>
    ). Zwykle zasoby te umieszcza się w
    res/values/attrs.xml. Oto
    przykład pliku attrs.xml:
<resources> <declare-styleable name="PieChart"> <attr name="showText" format="boolean" /> <attr name="labelPosition" format="enum"> <enum name="left" value="0"/> <enum name="right" value="1"/> </attr> </declare-styleable> </resources>
Ten kod deklaruje dwa atrybuty niestandardowe: showText i labelPosition,
    które należą do
    encja o nazwie PieChart. Nazwa elementu z możliwością stylu jest, zgodnie z konwencją, taka sama
    jako
    nazwa zajęć
    który definiuje widok niestandardowy. Chociaż przestrzeganie tej konwencji nie jest konieczne,
    wiele popularnego kodu
    korzystają z tej konwencji nazewnictwa, aby uzupełniać instrukcje.
Po zdefiniowaniu atrybutów niestandardowych możesz ich używać w plikach XML układu, tak jak w przypadku plików wbudowanych
    . Jedyna
    różnica polega na tym, że atrybuty niestandardowe należą do innej przestrzeni nazw. Zamiast poczucia przynależności
    do przestrzeni nazw http://schemas.android.com/apk/res/android, należą do domeny http://schemas.android.com/apk/res/[your package name]. Aby na przykład użyć atrybutu
    atrybuty zdefiniowane dla
    PieChart:
    
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:custom="http://schemas.android.com/apk/res-auto"> <com.example.customviews.charting.PieChart custom:showText="true" custom:labelPosition="left" /> </LinearLayout>
Aby uniknąć konieczności powtarzania identyfikatora URI długiej przestrzeni nazw, w przykładzie użyto atrybutu
            dyrektywa xmlns. Ta dyrektywa przypisuje alias custom do:
            przestrzeni nazw http://schemas.android.com/apk/res/com.example.customviews.
            Możesz wybrać dowolny alias dla swojej przestrzeni nazw.
Zwróć uwagę na nazwę tagu XML, który dodaje widok niestandardowy do układu. Jest to pełne
            kwalifikowana nazwa
            klasę widoku niestandardowego. Jeśli Twoja klasa wyświetlania jest klasą wewnętrzną, możesz ją dodatkowo zakwalifikować
            nazwą klasy zewnętrznej widoku.
            Na przykład plik
            Klasa PieChart ma klasę wewnętrzną o nazwie PieView. Aby użyć funkcji
            atrybutów niestandardowych z tych zajęć,
            użyj tagu com.example.customviews.charting.PieChart$PieView.
Zastosuj atrybuty niestandardowe
W przypadku tworzenia widoku z układu XML odczytywane są wszystkie atrybuty w tagu XML.
            z zasobu
            i przekazywana do konstruktora widoku jako
            AttributeSet
            Chociaż jest to
            można bezpośrednio odczytywać wartości z interfejsu AttributeSet, wykonując w ten sposób
            ma kilka wad:
- Odwołania do zasobów w wartościach atrybutów nie są rozpoznawane.
- Style nie zostały zastosowane.
Zamiast tego przekaż AttributeSet do:
            obtainStyledAttributes()
            Ta metoda zwraca
            TypedArray
            tablica
            które są
            już usunięte z wyników wyszukiwania i określonego stylu.
Kompilator zasobów Androida wykonuje wiele pracy, aby wywoływać u Ciebie
            obtainStyledAttributes()
            . Za: <declare-styleable>
            zasobu w katalogu res/, wygenerowany R.java definiuje zarówno tablicę atrybutu
            identyfikatory i zbiór
            stałe, które określają indeks każdego atrybutu w tablicy. Korzystasz ze wstępnie zdefiniowanego
            stałe do odczytu
            z tabeli TypedArray. Aby to zrobić:
            zajęcia PieChart
            odczytuje jego atrybuty:
Kotlin
init { context.theme.obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0).apply { try { mShowText = getBoolean(R.styleable.PieChart_showText, false) textPos = getInteger(R.styleable.PieChart_labelPosition, 0) } finally { recycle() } } }
Java
public PieChart(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.getTheme().obtainStyledAttributes( attrs, R.styleable.PieChart, 0, 0); try { mShowText = a.getBoolean(R.styleable.PieChart_showText, false); textPos = a.getInteger(R.styleable.PieChart_labelPosition, 0); } finally { a.recycle(); } }
Pamiętaj, że obiekty TypedArray
          są udostępniane
            i należy poddać ją recyklingowi po użyciu.
Dodawanie usług i zdarzeń
Atrybuty to potężny sposób na kontrolowanie zachowania i wyglądu widoków, ale
            mogą być tylko do odczytu
            po zainicjowaniu widoku. Aby zapewnić dynamiczne zachowanie, udostępnij metodę pobierającą właściwości i
            para ustawiająca dla każdej
            atrybutu niestandardowego. Ten fragment kodu pokazuje, jak PieChart udostępnia usługę
            pod tytułem showText:
Kotlin
fun isShowText(): Boolean { return mShowText } fun setShowText(showText: Boolean) { mShowText = showText invalidate() requestLayout() }
Java
public boolean isShowText() { return mShowText; } public void setShowText(boolean showText) { mShowText = showText; invalidate(); requestLayout(); }
Zwróć uwagę, że funkcja setShowText wywołuje funkcję invalidate()
            i requestLayout(). Te połączenia są bardzo ważne
            aby zapewnić prawidłowe działanie widoku. Potrzebujesz
            unieważnia widok po każdej zmianie we właściwościach, która mogłaby zmienić
            dzięki czemu
            system rozpoznaje ich potrzebę ponownego utworzenia. Podobnie musisz zażądać nowego układu, jeśli
            usługa zmienia się w sposób,
            co może mieć wpływ na rozmiar lub kształt widoku. Zapomnienie tych wywołań metody może spowodować
            trudno znaleźć
            robaki.
Widoki niestandardowe muszą też obsługiwać detektory zdarzeń do przekazywania ważnych zdarzeń. Dla:
            instancja, PieChart
            udostępnia zdarzenie niestandardowe o nazwie OnCurrentItemChanged, aby powiadamiać detektory, że
            użytkownik obrócił
            wykres kołowy, aby skupić się na nowym wycinku koła.
Możesz łatwo zapomnieć o udostępnieniu właściwości i zdarzeń, zwłaszcza gdy jesteś jedynym użytkownikiem od widoku niestandardowego. Poświęcenie czasu na dokładne zdefiniowanie interfejsu widoku ogranicza w przyszłości Warto przestrzegać zasad, aby zawsze ujawniać każdą właściwość, która ma wpływ na widoczne wygląd lub zachowanie do widoku niestandardowego.
Projektowanie z myślą o ułatwieniach dostępu
Widok niestandardowy musi obsługiwać szeroki zakres użytkowników. Obejmuje to użytkowników z niepełnosprawność, uniemożliwiać mu korzystanie z ekranu dotykowego. Aby pomóc użytkownikom z niepełnosprawnościami, wykonaj te czynności:
- Oznacz pola do wprowadzania danych za pomocą atrybutu android:contentDescription.
- Wywołuj zdarzenia ułatwień dostępu, dzwoniąc pod numer sendAccessibilityEvent()w razie potrzeby.
- Obsługa innych kontrolerów, takich jak pad kierunkowy lub kulka.
Więcej informacji o tworzeniu widoków ułatwień dostępu: Ułatwienia dostępu w aplikacjach
 
  