Wie erhalte ich die Inhaltsansicht von Activity?


279

Welche Methode sollte ich aufrufen, um zu erfahren, ob eine Aktivität ihre contentView hat (nachdem die Methode setContentView () aufgerufen wurde)?

Antworten:


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

oder

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

oder

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

4
oder getWindow().findViewById(android.R.id.content):)
Alex Lockwood

1
Dies funktioniert gut, wenn es um das Abrufen der übergeordneten Ansicht geht ... BUt..wenn ich dies versuche.findViewById (android.R.id.content) .setBackgroundDrawable (d); es dosent Arbeit .. Können Sie bitte vorschlagen .. Danke im Voraus
Rajesh Wadhwa

3
Wenn Sie ein Layout aus XML mithilfe von installieren setContentView(R.layout.my_view), wird das übergeordnete Element dieses Layouts zurückgegeben.
Jay Lieske

Hallo @ernest, ich habe eine Sortierfrage wie Wenn ich in meinem Layout ein Bild oben habe als zwei Registerkarten in der Registerkartenleiste. und unten wird ein SatelliteMenu geöffnet, in dem Menüpunkte verwischt werden sollen.
Devendra Singh

1
Inhalt existiert nicht für Android.Resource.Id.
Justin

23

Sie können die Ansicht Zurück erhalten, wenn Sie Ihrem Layout eine ID hinzufügen.

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

Und rufen Sie es von findViewById auf ...


Dies ist der robusteste Weg, um das Stammverzeichnis eines installierten Layouts zu ermitteln.
Jay Lieske

3
An was gehst du weiter findViewById?
Trans

1
@trans View contentView = findViewById (R.id.my_relative_layout_id);
Justin Liu

11

Wie wäre es mit

View view = Activity.getCurrentFocus();

Wie hat das nicht mehr Daumen hoch? Funktioniert super!
Aeskreis

1
@aeskreis, weil es in meinem Fall null zurückgibtcurrentFocus?.let { ... }
user924


5

Sie können auch überschreiben, onContentChanged()was unter anderem ausgelöst wird, wenn setContentView()es aufgerufen wurde.


ernests Antwort gibt Ihnen die aktuelle fokussierte Ansicht, auch wenn sie eine scrollbare Ansicht enthält
YuDroid

2

Wenn Sie verwenden Kotlin

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

1

Es gibt keine "isContentViewSet" -Methode. Sie können einen Dummy-Aufruf von requestWindowFeature in den try / catch-Block einfügen, bevor Sie setContentView wie folgt einstellen:

Versuchen {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} catch (AndroidRuntimeException e) {
  // mach was oder nichts
}}

Wenn die Inhaltsansicht bereits festgelegt wurde, löst requestWindowFeature eine Ausnahme aus.


-3

Die beste Option, die ich gefunden habe und die weniger aufdringlich ist, ist das Festlegen eines Tag-Parameters in Ihrer XML, wie z

TELEFON XML LAYOUT

<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"/>

TABLET XML LAYOUT

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

und rufen Sie dies dann in Ihrer Aktivitätsklasse auf:

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

Hoffe es funktioniert für dich.


2
Wie beantwortet dies die Frage?
Onik
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.