Bagaimana cara mendapatkan tampilan konten Activity?


279

Metode apa yang harus saya panggil untuk mengetahui apakah suatu Kegiatan memiliki contentView (setelah metode setContentView () dipanggil)?

Jawaban:


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

atau

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

atau

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

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

1
ini berfungsi dengan baik sejauh mengambil pandangan Orang Tua yang bersangkutan ... Tapi..jika saya coba this.findViewById (android.R.id.content) .setBackgroundDrawable (d); it dosent work .. Bisakah Anda menyarankan .. Terima kasih sebelumnya
Rajesh Wadhwa

3
Jika Anda menginstal tata letak dari XML menggunakan setContentView(R.layout.my_view), ini mengembalikan induk dari tata letak itu.
Jay Lieske

Halo @estest Saya punya pertanyaan seperti Jika di tata letak saya punya satu gambar di atas dari dua tab di bilah tab. dan di bagian bawah SatelliteMenu, Ingin melakukan blur pada item menu dibuka.
Devendra Singh

1
konten tidak ada untuk Android.Resource.Id.
Justin

23

Anda bisa mendapatkan tampilan Kembali jika Anda meletakkan ID ke Layout Anda.

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

Dan menyebutnya dari findViewById ...


Ini adalah cara paling kuat untuk mendapatkan root dari tata letak yang diinstal.
Jay Lieske

3
Apa yang Anda lewati findViewById?
trans

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

11

Bagaimana tentang

View view = Activity.getCurrentFocus();

Bagaimana ini tidak memiliki lebih banyak acungan jempol? Bagus sekali!
aeskreis

1
@ aeskreis karena dalam kasus saya ini mengembalikan nullcurrentFocus?.let { ... }
user924


5

Anda juga dapat menimpa onContentChanged()yang antara lain dipecat ketika setContentView()telah dipanggil.


jawaban ernest akan memberi Anda tampilan fokus saat ini bahkan jika berisi tampilan yang dapat digulir
YuDroid

2

Jika Anda menggunakan Kotlin

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

1

Tidak ada metode "isContentViewSet". Anda dapat memasukkan beberapa panggilan dummy requestWindowFeature ke blok try / catch sebelum setContentView seperti ini:

coba {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} catch (AndroidRuntimeException e) {
  // lakukan sesuatu atau tidak sama sekali
}

Jika tampilan konten sudah diatur, requestWindowFeature akan mengeluarkan pengecualian.


-3

Opsi terbaik yang saya temukan dan yang tidak terlalu mengganggu, adalah mengatur param tag di xml Anda, seperti

LAYOUT XML TELEPON

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

dan kemudian panggil ini di kelas aktivitas Anda:

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

Semoga ini berhasil untuk Anda.


2
Bagaimana ini menjawab pertanyaan?
Onik
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.