Jak uzyskać widok zawartości działania?

279

Jaką metodę powinienem wywołać, aby wiedzieć, czy działanie ma swój contentView (po wywołaniu metody setContentView () )?

teoREtik
źródło

Odpowiedzi:

523
this.getWindow().getDecorView().findViewById(android.R.id.content)

lub

this.findViewById(android.R.id.content)

lub

this.findViewById(android.R.id.content).getRootView()
Ernest
źródło
4
lub getWindow().findViewById(android.R.id.content):)
Alex Lockwood
1
działa to dobrze, jeśli chodzi o pobieranie widoku nadrzędnego ... BUt .. jeśli spróbuję this.findViewById (android.R.id.content) .setBackgroundDrawable (d); to nie działa .. Czy możesz mi zasugerować .. Z góry dziękuję
Rajesh Wadhwa
3
Jeśli instalujesz układ z XML za pomocą setContentView(R.layout.my_view), zwraca to rodzic tego układu.
Jay Lieske
Cześć @ Ernest Mam pytanie sortujące, takie jak Jeśli w moim układzie mam jeden obraz na górze niż dwie karty na pasku kart. a na dole otwiera się menu SatelliteMenu, które chcesz rozmyć w elementach menu.
Devendra Singh,
1
treść nie istnieje dla Androida.Resource.Id.
Justin
23

Możesz uzyskać widok Wstecz, jeśli umieścisz identyfikator w swoim układzie.

<RelativeLayout
    android:id="@+id/my_relative_layout_id"

I nazwij to z findViewById ...

papachan
źródło
Jest to najbardziej niezawodny sposób na uzyskanie katalogu głównego zainstalowanego układu.
Jay Lieske
3
Do czego przechodzisz findViewById?
trans
1
@trans Wyświetl contentView = findViewById (R.id.my_relative_layout_id);
Justin Liu
11

Co powiesz na

View view = Activity.getCurrentFocus();
Mike Jones
źródło
Jak to nie ma więcej kciuki do góry? Działa świetnie!
aeskreis
1
@aeskreis, ponieważ w moim przypadku zwraca wartość nullcurrentFocus?.let { ... }
924
10

Możesz spróbować View.getRootView().

Will Tate
źródło
5

Możesz także zastąpić, onContentChanged()który jest między innymi uruchamiany, gdy setContentView()został wywołany.

Chris
źródło
Odpowiedź
ernesta
2

Jeśli używasz Kotlin

    this.findViewById<View>(android.R.id.content)
                         .rootView
                         .setBackgroundColor(ContextCompat.getColor(this, R.color.black))
Hitesh Sahu
źródło
1

Nie ma metody „isContentViewSet”. Możesz umieścić fałszywe wywołanie requestWindowFeature w bloku try / catch przed setContentView w następujący sposób:

próbować {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} catch (AndroidRuntimeException e) {
  // rób coś lub nic
}

Jeśli widok zawartości został już ustawiony, requestWindowFeature zgłosi wyjątek.

sergeytch
źródło
-3

Najlepszą opcją, którą znalazłem i mniej inwazyjną, jest ustawienie parametru znacznika w pliku xml, na przykład

UKŁAD TELEFONU XML

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="phone"/>

UKŁAD TABLETU XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:tag="tablet">

    ...

</RelativeLayout>

a następnie nazwij to w swojej klasie aktywności:

View viewPager = findViewById(R.id.pager);
Log.d(getClass().getSimpleName(), String.valueOf(viewPager.getTag()));

Mam nadzieję, że to zadziała u ciebie.

Alejandro Tellez
źródło
2
Jak to odpowiada na pytanie?
Onik