Tworzenie zajęć w widoku danych

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak korzystać z układów w funkcji Utwórz

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