Я знаю, як отримати перегляд кореня за допомогою View.getRootView () . Я також можу отримати подання з onClick
події кнопки, де аргументом є Вид . Але як я можу отримати погляд у діяльності ?
Я знаю, як отримати перегляд кореня за допомогою View.getRootView () . Я також можу отримати подання з onClick
події кнопки, де аргументом є Вид . Але як я можу отримати погляд у діяльності ?
Відповіді:
Якщо вам потрібен перегляд кореневої діяльності (ви можете додати свій вміст туди), використовуйте
findViewById(android.R.id.content).getRootView()
Також повідомлялося, що на деяких пристроях вам доведеться користуватися
getWindow().getDecorView().findViewById(android.R.id.content)
замість цього.
Зауважте, що, як повідомляв Booger, на деяких пристроях це може бути поза навігаційною панеллю (із кнопкою "назад" тощо) (але на більшості пристроїв це здається, що це не так).
Якщо вам потрібно переконатися, що ви додали до своєї діяльності setContentView()
методом, тоді, як написано м'ясо в горщиках, ви можете використовувати
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Але краще просто встановити ідентифікатор для цього виду у своєму форматі xml та використовувати його замість цього.
Це те, що я використовую для отримання подання кореня, як знайдено у файлі XML, призначеному setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
також?
Я тестував це на android 4.0.3, лише:
getWindow().getDecorView().getRootView()
даємо той же погляд, що ми отримуємо
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
і
getWindow().getDecorView().findViewById(android.R.id.content)
даючи дитині її
android.widget.FrameLayout@#######
Будь-ласка підтвердіть.
У Котліні ми можемо зробити це трохи коротше:
val rootView = window.decorView.rootView
Просто обкладіть, якщо комусь потрібен простіший спосіб:
Наступний код дає уявлення про всю діяльність:
View v1 = getWindow().getDecorView().getRootView();
Щоб отримати сертифікаційний вигляд діяльності, наприклад imageView усередині діяльності, просто додайте ідентифікатор цього виду, який ви хочете отримати:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Сподіваюся, це комусь допомагає
findViewById(R.id.imageView1);
на активність, якщо ви хочете певного виду.
Використовуйте це для спрощення доступу до діяльності. Тоді ви можете безпосередньо посилатися на rootView
"Діяльність" або activity.rootView
поза нею:
val Activity.rootView get() = window.decorView.rootView
Якщо ви хочете додати те саме для фрагментів для послідовності, додайте:
val Fragment.rootView get() = view?.rootView
щоб отримати Перегляд поточної активності
в будь-якому onClick ми отримаємо "Перегляд подання", використовуючи "view" отримати rootView.
View view = view.getRootView ();
і отримати View у фрагменті
View view = FragmentClass.getView ();
якщо ви займаєтесь діяльністю, припустимо, що існує лише один корінь, ви можете отримати його таким.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Ви можете подати його до свого реального класу
або ви могли використовувати
getWindow().getDecorView();
зауважте, що це буде містити перегляд панелі дій, ваш перегляд знаходиться нижче подання панелі дій
Activity
класі такого методу немає .
Для тих із вас, хто використовує бібліотеку прив'язки даних , щоб отримати корінь поточної діяльності, просто використовуйте:
View rootView = dataBinding.getRoot();
А для користувачів Kotlin це ще простіше:
val rootView = dataBinding.root
Якщо подання вашої діяльності оголошено в xml (наприклад activity_root.xml
), відкрийте xml та призначте ідентифікатор кореневому виду:
android:id="@+id/root_activity"
Тепер у вашому класі імпортуйте представлення, використовуючи:
import kotlinx.android.synthetic.main.activity_root.root_activity
Тепер ви можете використовувати root_activity
як перегляд.
setContentView()
а представлений вами вигляд - це вже корінь. Якщо вам потрібна ручка цього виду, просто поставте ідентифікатор до нього в XAML іfindViewById()
все буде добре.