Co to jest „narzędzia: kontekst” w plikach układu Androida?


936

Począwszy od najnowszej nowej wersji narzędzia ADT zauważyłem ten nowy atrybut w plikach XML układu, na przykład:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" />

Do czego służy „narzędzia: kontekst”?

Skąd w ogóle zna dokładną ścieżkę do zapisanej tam czynności? Czy wygląda na pakiet aplikacji w manifeście?

Czy ogranicza się to do zajęć, które rozszerzają kontekst lub tylko zajęcia? Czy nadaje się do elementów ListView itp.?


tak, zastanawiam się, co jeszcze przeoczyłem (nie widząc tego w sekcjach „co nowego”), ponieważ zawsze instaluję najnowszą najnowszą wersję adt & sdk (obecnie korzystam z podglądu adt & sdk 20 3).
programista Androida

9
Zobacz także oficjalne dokumenty tutaj: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
MDTech.us_MAN

2
Moja aplikacja nadal działa bez kontekstu.
najbardziej czcigodny

1
@ user132522 Chodzi o rozwój, w samym IDE. Nie podczas uruchamiania aplikacji
programista Androida

Odpowiedzi:


440

Jest to działanie, którego używa edytor interfejsu użytkownika narzędzi do renderowania podglądu układu. Jest to udokumentowane tutaj :

Ten atrybut określa, z jaką aktywnością domyślnie jest powiązany ten układ. Umożliwia to funkcje w edytorze lub podglądzie układu, które wymagają znajomości działania, takie jak motyw układu w podglądzie i gdzie wstawiać moduły obsługi onClick podczas tworzenia ich z poprawki


Widzę . zgodnie ze zrzutem ekranu tutaj: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… , oznacza to, że nie musi to być klasa rozszerzająca kontekst, prawda? jeśli tak, myślę, że robi to więcej niż to, co mówisz, choć nie jestem pewien, co.
deweloper Androida

2
Activityrozszerza się Context, więc nie jesteś pewien, co masz na myśli? Rzeczywiście może robić więcej, jeśli jesteś zainteresowany, sprawdź kod źródłowy, jest dostępny. Nie znam żadnych szczegółów.
Nikolay Elenkov

ups. nie przeczytałem poprawnie tekstu zrzutu ekranu .sorry. gdy najedziesz kursorem na to, co pokazałem, powie również, że może to być fragment, ale fragmenty nie mają nigdzie napisanego motywu, prawda? w każdym razie nadal nie jestem pewien, do czego służy ten nowy atrybut. zastanawiam się, czy nowe google io powie o tym.
programista Androida

25
nakręcili nowy film, który pokazuje te funkcje: youtube.com/…
programista Androida


380

Ten atrybut jest zasadniczo trwałością wyboru „Powiązanej aktywności” nad układem. W czasie wykonywania układ jest zawsze powiązany z działaniem. Można go oczywiście powiązać z więcej niż jednym, ale co najmniej jednym. W narzędziu musimy wiedzieć o tym odwzorowaniu (które w czasie wykonywania dzieje się w innym kierunku; działanie może wywołać setContentView (układ) w celu wyświetlenia układu) w celu sterowania niektórymi funkcjami.

W tej chwili używamy go tylko do jednej rzeczy: wybranie odpowiedniego motywu do wyświetlenia dla układu (ponieważ plik manifestu może zarejestrować motywy do użycia dla działania , a gdy poznamy aktywność związaną z układem, możemy wybrać odpowiedni motyw do wyświetlenia dla układu). W przyszłości wykorzystamy to do obsługi dodatkowych funkcji - takich jak renderowanie paska akcji (który jest powiązany z działaniem), miejsce do dodawania programów obsługi onClick itp.

Powodem tego jest atrybut narzędzi: przestrzeń nazw, ponieważ jest to tylko mapowanie designtime do użycia przez narzędzie. Sam układ może być używany przez wiele działań / fragmentów itp. Chcemy tylko dać ci możliwość wyboru powiązania designtime, abyśmy mogli na przykład pokazać odpowiedni motyw; możesz to zmienić w dowolnym momencie, tak jak możesz zmienić nasz widok listy i powiązania fragmentów itp.

(Oto pełny zestaw zmian, który zawiera więcej szczegółów na ten temat )

I tak, powyższy link Nikolay pokazuje, jak wygląda i działa nowy selektor konfiguracji

Jeszcze jedno: przestrzeń nazw „narzędzi” jest wyjątkowa. Android narzędzie do pakowania wie, jak go zignorować, więc żaden z tych atrybutów nie zostanie spakowany w pliku APK. Używamy go do dodatkowych metadanych w układzie. W tym miejscu przechowywane są na przykład atrybuty tłumiące ostrzeżenia o kłaczkach - jako narzędzia: ignoruj.


skąd zna pełną ścieżkę do działania, jeśli nie ma pakietu podstawowego? czy to wygląda na plik manifestu?
deweloper Androida

2
Tak, traktuje to tak samo, jak rejestracje aktywności w pliku manifestu, gdzie można również pominąć pakiet w atrybucie name. W razie potrzeby dołącza deklarację pakietu z elementu głównego pliku manifestu.
Tor Norbye,

miły . czy to wszystko (i więcej) będzie pokazywane na Google io 2012? nie mogę się doczekać, aby usłyszeć o nowych funkcjach. :)
programista Androida

1
W wygenerowanym pliku XML dla nowego projektu umieszcza tools:contextwartość w TextViewpolu. Ponieważ brzmi to jak globalny przypadek użycia do zastosowania motywu do całego układu, dlaczego nie jest on umieszczony w układzie głównym?
Jason Robinson

3
Dodałem dokument, który dokumentuje nasze obecne atrybuty narzędzi: tools.android.com/tech-docs/tools-attributes
Tor Norbye

92

Według strony projektu Android Tools :

narzędzia: kontekst

Ten atrybut jest zwykle ustawiany na elemencie głównym w pliku XML układu i rejestruje, z jaką aktywnością jest powiązany układ (w designtime, ponieważ oczywiście układ może być używany przez więcej niż jeden układ). Będzie to na przykład wykorzystane przez edytor układu do odgadnięcia domyślnego motywu, ponieważ motywy są zdefiniowane w Manifeście i są powiązane z działaniami, a nie układami. Możesz użyć tego samego prefiksu kropki, co w manifestach, aby po prostu określić klasę aktywności bez pełnej nazwy pakietu aplikacji jako prefiksu.

<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">  

Używany przez: Redaktory układu w Studio i Eclipse, Lint


14

1. opis

tools: context = "activity name"nie zostanie on spakowany do apk.Only ADTLayout Editor w bieżącym zestawie plików Layout odpowiadającym kontekście renderowania, pokaż swój obecny Layout w renderowaniu kontekstu, jeśli nazwa działania odpowiada działaniu, jeśli działanie w zestawie manifestzestawu Theme, to ADTEdytor układu wyrenderuje twój bieżący układ zgodnie z kompozycją. Oznacza to, że jeśli ustawisz MainActivityzestaw kompozycję . Światło (drugie), a następnie zobaczysz w wizualnym menedżerze układu o kontrolę tła tego, co powinno być motywem. Światło wygląda tak, aby pokazać Ci tylko to, co widzisz.

Niektórzy widzą, że niektórzy to rozumieją, inni też nie rozumieją, dodam kilka słów wyjaśnienia:

2.Próbka

Weź prosty tools:text, na przykład, trochę więcej obrazu, wygodny, aby lepiej zrozumiećtools:context

<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="sample name1" />

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="sample name2" />

wprowadź opis zdjęcia tutaj

TextView1 przyjęła android: text, i użyć tools:textw TextView2, po prawej stronie edytora układu wyświetli sample name1, na sample name2dwie czcionki, jeśli po uruchomieniu kodu do kompilacji, wygenerowane apk, zacisk wyświetlacz tylko sample name1, nie pokazuje sample name2słów. Możesz spróbować uruchomić, zobacz jak efekt.

3. Szczegółowy opis

1. tools: context = "activity name"Nie zostanie spakowany do apk(zrozumienie: odpowiednik tego jest skomentowany, skompilowany brak efektu).

2.Tylko ADTedytor układu (tj. Dla powyższej ikony po prawej stronie symulatora) w bieżącym pliku układu ustawia odpowiedni kontekst renderowania, układ bieżącego XML w renderowaniu kontekstu to nazwa działania odpowiadająca działaniu, jeśli aktywność w pliku manifestu ustawia motyw, a następnie ADTEdytor układu wyrenderuje bieżący układ zgodnie z motywem. Oznacza to, że jeśli ustawisz MainActivityzestaw temat. Światło może być również (inne). (Zrozum: dodałeś tools: context = "activity name", układ XML renderuje określoną aktywność, ustanawia kompozycję w pliku manifestu, na zdjęciu powyżej prawego symulatora Styl kompozycji będzie również podążał za zmianami odpowiadającymi kompozycji).

4. podsumowanie

Podsumowując, te właściwości mają na celu przede wszystkim nad odpowiednimi narzędziami, stan wyświetlania czasu debugowania symulatora i kompilacja nie działa,


7

„Narzędzia: kontekst” to jeden z atrybutów projektowych, który może ułatwić tworzenie układu w języku XML w środowisku programistycznym. Ten atrybut służy do pokazania środowisku programistycznemu, jaką klasę aktywności wybiera się do implementacji układu. Korzystając z „narzędzi: kontekst”, Android Studio automatycznie wybiera niezbędny motyw do podglądu.

Jeśli chcesz dowiedzieć się więcej o niektórych innych atrybutach i przydatnych narzędziach do tworzenia aplikacji na Androida, zapoznaj się z tą recenzją: http://cases.azoft.com/4-must-know-tools-for-effective-android -rozwój/


3

To najlepsze rozwiązanie: https://developer.android.com/studio/write/tool-attributes

To atrybuty projektu, które możemy ustawić kontekst aktywacji w formacie XML

tools:context=".activity.ActivityName"

Adapter:

tools:context="com.PackegaName.AdapterName"

wprowadź opis zdjęcia tutaj

Możesz przejść do klasy java, klikając zaznaczoną ikonę, a narzędzia mają więcej funkcji, takich jak

tools:text=""
tools:visibility:""
tools:listItems=""//for recycler view 

etx


0

tools:context=".MainActivity" ta linia jest używana w pliku xml, który wskazuje, który plik źródłowy Java jest używany do uzyskania dostępu do tego pliku xml. oznacza to pokazanie tego podglądu xml dla perticular plików Java.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.