Получить корневой вид из текущей активности
Я знаю, как получить корневой вид с помощью View.getRootView (). Я также могу получить вид от кнопки onClick
событие, где аргумент является представлением. Но как я могу получить представление в деятельности?
9 ответов
Если вам нужен root вид вашей активности (чтобы вы могли добавить туда свой контент) используйте
findViewById(android.R.id.content)
Также сообщалось, что на некоторых устройствах вы должны использовать
getWindow().getDecorView().findViewById(android.R.id.content)
вместо.
Обратите внимание, что, как сообщил Booger, это может быть за панелью навигации (с кнопкой "Назад" и т. Д.) На некоторых устройствах (но на большинстве устройств это не так).
Если вам нужно получить представление о том, что вы добавили в свою деятельность, используя setContentView()
метод, то, как написал pottedmeat, вы можете использовать
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);
Я проверял это в 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@#######
Пожалуйста подтвердите.
Получить корневой вид из текущей деятельности.
Внутри нашей деятельности мы можем получить root
просмотреть с помощью:
ViewGroup rootView = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
или же
View rootView = getWindow().getDecorView().getRootView();
В Kotlin мы можем сделать это немного короче:
val rootView = window.decorView.rootView
Просто если кому-то нужен более простой способ:
Следующий код дает представление о всей деятельности:
View v1 = getWindow().getDecorView().getRootView();
Чтобы получить определенный вид в действии, например, imageView внутри действия, просто добавьте идентификатор того представления, которое вы хотите получить:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Надеюсь, это кому-нибудь поможет
Kotlin Extension Solution
Используйте это, чтобы упростить доступ в Activity. Тогда вы можете напрямую обратиться кrootView
из Действия, или activity.rootView
вне его:
val Activity.rootView get() = window.decorView.rootView
Если вы хотите добавить то же самое для фрагментов для единообразия, добавьте:
val Fragment.rootView get() = view?.rootView
Для тех из вас, кто использует библиотеку привязки данных, чтобы получить корень текущего действия, просто используйте:
View rootView = dataBinding.getRoot();
А для пользователей Kotlin все еще проще:
val rootView = dataBinding.root
Получить представление о текущей активности
в любом onClick мы будем получать "View view", с помощью "view" получить rootView.
View view = view.getRootView ();
и получить View во фрагменте
View view = FragmentClass.getView();
Еще одно решение Kotlin Extension
Если представление вашей активности объявлено в xml (например, activity_root.xml
), откройте xml и назначьте идентификатор корневому представлению:
android:id="@+id/root_activity"
Теперь в вашем классе импортируйте представление, используя:
import kotlinx.android.synthetic.main.activity_root.root_activity
Теперь вы можете использовать root_activity
как мнение.
Если вы находитесь в упражнении, предположим, что есть только одно корневое представление, вы можете получить его следующим образом.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Затем вы можете привести его в свой реальный класс
или вы могли бы использовать
getWindow().getDecorView();
обратите внимание, что это будет включать в себя вид панели действий, ваш вид ниже представления панели действий