Saya tahu cara mendapatkan tampilan root dengan View.getRootView () . Saya juga bisa mendapatkan tampilan dari acara tombol di onClick
mana argumennya adalah Tampilan . Tetapi bagaimana saya bisa mendapatkan tampilan dalam suatu kegiatan ?
Saya tahu cara mendapatkan tampilan root dengan View.getRootView () . Saya juga bisa mendapatkan tampilan dari acara tombol di onClick
mana argumennya adalah Tampilan . Tetapi bagaimana saya bisa mendapatkan tampilan dalam suatu kegiatan ?
Jawaban:
Jika Anda membutuhkan tampilan root dari aktivitas Anda (sehingga Anda dapat menambahkan konten Anda di sana) gunakan
findViewById(android.R.id.content).getRootView()
Juga dilaporkan bahwa pada beberapa perangkat Anda harus menggunakan
getWindow().getDecorView().findViewById(android.R.id.content)
sebagai gantinya.
Harap perhatikan bahwa seperti yang dilaporkan Booger, ini mungkin berada di belakang bilah navigasi (dengan tombol kembali dll.) Pada beberapa perangkat (tetapi tampaknya pada sebagian besar perangkat tidak).
Jika Anda perlu mendapatkan tampilan yang Anda tambahkan ke aktivitas Anda menggunakan setContentView()
metode maka sebagai pottedmeat menulis Anda dapat menggunakan
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Tetapi lebih baik atur id ke tampilan ini di layout xml Anda dan gunakan id ini sebagai gantinya.
Ini yang saya gunakan untuk mendapatkan tampilan root seperti yang ditemukan dalam file XML yang ditugaskan setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
juga?
Saya menguji ini di android 4.0.3, hanya:
getWindow().getDecorView().getRootView()
berikan pandangan yang sama dari apa yang kita dapatkan
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
dan
getWindow().getDecorView().findViewById(android.R.id.content)
memberi anak itu
android.widget.FrameLayout@#######
Mohon konfirmasi.
Di Kotlin kita bisa melakukannya sedikit lebih pendek:
val rootView = window.decorView.rootView
Hanya memetikan Seseorang membutuhkan cara yang lebih mudah:
Kode berikut memberikan pandangan tentang seluruh aktivitas:
View v1 = getWindow().getDecorView().getRootView();
Untuk mendapatkan tampilan yang pasti dalam aktivitas, misalnya imageView di dalam aktivitas, cukup tambahkan id dari tampilan yang ingin Anda dapatkan:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Semoga ini bisa membantu seseorang
findViewById(R.id.imageView1);
aktivitas jika Anda ingin tampilan tertentu.
Gunakan ini untuk menyederhanakan akses dalam suatu Kegiatan. Kemudian Anda dapat merujuk langsung rootView
dari Aktivitas, atau di activity.rootView
luarnya:
val Activity.rootView get() = window.decorView.rootView
Jika Anda ingin menambahkan yang sama untuk Fragmen untuk konsistensi, tambahkan:
val Fragment.rootView get() = view?.rootView
untuk mendapatkan Tampilan Aktivitas saat ini
di onClick manapun kita akan mendapatkan "View view", dengan menggunakan 'view' get the rootView.
Lihat tampilan = view.getRootView ();
dan untuk mendapatkan View secara terpisah
Lihat tampilan = FragmentClass.getView ();
jika Anda berada dalam suatu kegiatan, anggap hanya ada satu tampilan root, Anda bisa mendapatkannya seperti ini.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Anda kemudian dapat melemparkannya ke kelas Anda yang sebenarnya
atau Anda bisa menggunakan
getWindow().getDecorView();
perhatikan ini akan mencakup tampilan actionbar, tampilan Anda di bawah tampilan actionbar
Activity
kelas.
Bagi Anda yang menggunakan Perpustakaan Binding Data , untuk mendapatkan root dari aktivitas saat ini, cukup gunakan:
View rootView = dataBinding.getRoot();
Dan untuk pengguna Kotlin, itu bahkan lebih sederhana:
val rootView = dataBinding.root
Jika tampilan aktivitas Anda dinyatakan dalam xml (ex activity_root.xml
), buka xml dan berikan id ke tampilan root:
android:id="@+id/root_activity"
Sekarang di kelas Anda, impor tampilan menggunakan:
import kotlinx.android.synthetic.main.activity_root.root_activity
Anda sekarang dapat menggunakan root_activity
sebagai tampilan.
setContentView()
dan pandangan yang Anda berikan sudah menjadi root. Jika Anda perlu menangani tampilan itu, cukup masukkan ID di XAML danfindViewById()
akan baik-baik saja.