Aktivitenin içerik görünümünü nasıl alabilirim?


279

Bir Aktivitenin contentView'inin ( setContentView () yöntemi çağrıldıktan sonra ) olup olmadığını bilmek için hangi yöntemi çağırmalıyım ?

Yanıtlar:


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

veya

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

veya

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

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

1
Bu üst görünüm getirme kadar iyi çalışıyor ... BUt..if i try.findViewById (android.R.id.content) .setBackgroundDrawable (d); iş dosent .. Lütfen önerebilir misiniz .. Şimdiden teşekkürler
Rajesh Wadhwa

3
Kullanarak XML'den bir düzen yüklerseniz setContentView(R.layout.my_view), bu düzenin üst öğesi döndürülür .
Jay Lieske

Merhaba @ernest Benim düzenimde sekme çubuğunda iki sekmenin üstünde bir görüntü varsa, gibi bir sıralama sorum var. ve altta bir SatelliteMenu, Bulanıklık yapmak istiyorum menü öğeleri açılır.
Devendra Singh

1
içeriği Android.Resource.Id için mevcut değil.
Justin

23

Mizanpajınıza bir kimlik koyarsanız görünümü Geri alabilirsiniz.

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

Ve findViewById'den arayın ...


Bu, kurulu bir düzenin kökünü almanın en sağlam yoludur.
Jay Lieske

3
Ne geçiyorsun findViewById?
trans

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

11

Peki ya

View view = Activity.getCurrentFocus();

Bunun nasıl daha fazla başparmakları yok? Harika çalışıyor!
aeskreis

1
@aeskreis çünkü benim durumumda null döndürürcurrentFocus?.let { ... }
user924


5

Ayrıca onContentChanged(), setContentView()çağrıldığında tetiklenen diğerlerinin arasında geçersiz kılabilirsiniz .



2

Kullanıyorsanız Kotlin

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

1

"İsContentViewSet" yöntemi yoktur. SetContentView'ı aşağıdaki gibi denemeden önce try / catch bloğuna kukla requestWindowFeature çağrısı koyabilirsiniz:

Deneyin {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} catch (AndroidRuntimeException e) {
  // bir şey yapmak
}

İçerik görünümü önceden ayarlanmışsa, requestWindowFeature bir istisna atar.


-3

Bulduğum en iyi seçenek ve daha az müdahaleci, xml'nizde bir etiket parametresi ayarlamaktır.

TELEFON XML DÜZENİ

<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 DÜZENİ

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

ve bunu aktivite sınıfınızda arayın:

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

Umarım sizin için çalışır.


2
Bu soruya nasıl cevap veriyor?
Onik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.