Bagaimana cara mendapatkan tampilan konten Activity?

279

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

teoREtik
sumber

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()
ernest
sumber
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 ...

papachan
sumber
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();
mike jones
sumber
Bagaimana ini tidak memiliki lebih banyak acungan jempol? Bagus sekali!
aeskreis
1
@ aeskreis karena dalam kasus saya ini mengembalikan nullcurrentFocus?.let { ... }
user924
10

Anda mungkin ingin mencoba View.getRootView().

Will Tate
sumber
5

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

Chris
sumber
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))
Hitesh Sahu
sumber
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.

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

Alejandro Tellez
sumber
2
Bagaimana ini menjawab pertanyaan?
Onik