Як отримати перегляд вмісту діяльності?


279

Який метод я повинен зателефонувати, щоб дізнатися, чи має активність contentView (як тільки виклик методу setContentView () )?

Відповіді:


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

або

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

або

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

4
або getWindow().findViewById(android.R.id.content):)
Алекс Локвуд

1
це добре працює, що стосується вибору батьківського подання ... BUt..якщо я спробую this.findViewById (android.R.id.content) .setBackgroundDravable (d); це дозова робота. Чи можете ви запропонуйте, будь ласка, заздалегідь дякую
Rajesh Wadhwa

3
Якщо ви встановите макет із XML за допомогою setContentView(R.layout.my_view), це повертає батьківську програму цього макета.
Джей Ліске

Привіт @ernest У мене є своєрідне запитання на кшталт Якщо у моєму макеті є одне зображення зверху, ніж дві вкладки на панелі вкладок. а внизу відкривається SatelliteMenu, Хочете зробити розмиття на пунктах меню.
Девендра Сінгх

1
вміст не існує для Android.Resource.Id.
Джастін

23

Ви можете отримати вигляд Назад, якщо поставити ідентифікатор до своєї макети.

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

І зателефонуйте до нього з findViewById ...


Це найбільш надійний спосіб отримати корінь встановленої верстки.
Jay Lieske

3
Що ти передаєш findViewById?
транс

1
@trans Переглянути contentView = findViewById (R.id.my_relative_layout_id);
Джастін Лю

11

Як щодо

View view = Activity.getCurrentFocus();

Як це не має більше пальців? Чудово працює!
aeskreis

1
@aeskreis, тому що в моєму випадку він повертає nullcurrentFocus?.let { ... }
user924


5

Ви також можете перекрити те, onContentChanged()що є серед інших, звільнених після setContentView()виклику.


відповідь
Ернеста

2

Якщо ви використовуєте Kotlin

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

1

Не існує методу "isContentViewSet". Ви можете поставити деякий фіктивний requestWindowFeature виклик у блок "try / catch" перед setContentView:

спробуйте {
  requestWindowFeature (Window.FEATURE_CONTEXT_MENU);
  setContentView (...)
} ловити (AndroidRuntimeException e) {
  // робити що-небудь чи нічого
}

Якщо в режимі перегляду вмісту вже встановлено, виклик requestWindowFeature буде винятком.


-3

Найкращий варіант, який я знайшов і менш нав'язливий, - це встановити параметр тегів у вашому xml, наприклад

ТЕЛЕФОН XML РОЗВИТКУ

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

РОЗМІР ТАБЛЕТУ XML

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

а потім зателефонуйте цьому у своєму класі занять:

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

Сподіваюся, що це працює для u.


2
Як це відповідає на питання?
Оник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.