Wiem, jak uzyskać widok główny za pomocą View.getRootView () . Jestem również w stanie uzyskać widok ze onClick
zdarzenia przycisku, w którym argumentem jest Widok . Ale jak mogę uzyskać widok w działaniu ?
Wiem, jak uzyskać widok główny za pomocą View.getRootView () . Jestem również w stanie uzyskać widok ze onClick
zdarzenia przycisku, w którym argumentem jest Widok . Ale jak mogę uzyskać widok w działaniu ?
Odpowiedzi:
Jeśli potrzebujesz widoku głównego swojej aktywności (abyś mógł tam dodać swoją zawartość), użyj
findViewById(android.R.id.content).getRootView()
Zgłoszono również, że na niektórych urządzeniach trzeba używać
getWindow().getDecorView().findViewById(android.R.id.content)
zamiast.
Należy pamiętać, że jak poinformował Booger, może to być za paskiem nawigacji (z przyciskiem Wstecz itp.) Na niektórych urządzeniach (ale wydaje się, że na większości urządzeń tak nie jest).
Jeśli chcesz zobaczyć widok dodany do swojej aktywności za pomocą setContentView()
metody, to jak napisałeś pottedmeat, możesz użyć
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Ale lepiej po prostu ustaw identyfikator dla tego widoku w układzie XML i użyj tego identyfikatora.
To jest to, czego używam, aby uzyskać widok główny znaleziony w pliku XML przypisanym z setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
również?
Testowałem to w Androidzie 4.0.3, tylko:
getWindow().getDecorView().getRootView()
dać taki sam pogląd, co otrzymujemy
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
i
getWindow().getDecorView().findViewById(android.R.id.content)
dając swojemu dziecku
android.widget.FrameLayout@#######
Proszę potwierdzić.
W Kotlinie możemy to zrobić nieco krócej:
val rootView = window.decorView.rootView
Po prostu incydent Ktoś potrzebuje łatwiejszego sposobu:
Poniższy kod przedstawia widok całej aktywności:
View v1 = getWindow().getDecorView().getRootView();
Aby uzyskać widok certian w działaniu, na przykład imageView wewnątrz działania, wystarczy dodać identyfikator tego widoku, który chcesz uzyskać:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Mam nadzieję, że to komuś pomoże
findViewById(R.id.imageView1);
aktywność, jeśli chcesz mieć konkretny widok.
Użyj tego, aby uprościć dostęp do działania. Następnie możesz bezpośrednio odnieść się do rootView
działania lub activity.rootView
poza nim:
val Activity.rootView get() = window.decorView.rootView
Jeśli chcesz dodać to samo dla Fragmentów dla spójności, dodaj:
val Fragment.rootView get() = view?.rootView
, aby uzyskać widok bieżącej aktywności
w dowolnym onClick dostaniemy „Widok widoku”, używając „widok” pobierz rootView.
View view = view.getRootView ();
i uzyskać fragment w widoku
View view = FragmentClass.getView ();
jeśli jesteś w działaniu, załóż, że istnieje tylko jeden widok główny, możesz go uzyskać w ten sposób.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
możesz rzucić to na swoją prawdziwą klasę
lub możesz użyć
getWindow().getDecorView();
zauważ, że obejmie to widok paska akcji, twój widok znajduje się poniżej widoku paska akcji
Activity
klasie nie ma takiej metody .
Dla tych z was, którzy korzystają z Biblioteki wiązania danych , aby uzyskać źródło bieżącej aktywności, wystarczy użyć:
View rootView = dataBinding.getRoot();
A dla użytkowników Kotlin jest to jeszcze prostsze:
val rootView = dataBinding.root
Jeśli widok twojej aktywności jest zadeklarowany w xml (ex activity_root.xml
), otwórz xml i przypisz identyfikator do widoku głównego:
android:id="@+id/root_activity"
Teraz w swojej klasie zaimportuj widok, używając:
import kotlinx.android.synthetic.main.activity_root.root_activity
Możesz teraz używać root_activity
jako widoku.
setContentView()
a podany widok jest już katalogiem głównym. Jeśli potrzebujesz uchwytu tego widoku, po prostu umieść go w XAML ifindViewById()
będzie dobrze.