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 () )?

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()

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 ...


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();

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


5

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


Odpowiedź
ernesta

2

Jeśli używasz Kotlin

    this.findViewById<View>(android.R.id.content)
                         .rootView
                         .setBackgroundColor(ContextCompat.getColor(this, R.color.black))

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.


-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.


2
Jak to odpowiada na pytanie?
Onik
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.