Как получить все виды в действии?
Есть ли способ получить каждое представление, которое находится внутри моей активности?
У меня более 200 просмотров, включая кнопки и изображения, поэтому я хочу иметь доступ к ним с помощью цикла
например, что-то вроде
for (View v : this)
{
//do something with the views
//depending on the types (button, image , etc)
}
Ответы
Ответ 1
есть ли способ получить каждое представление, которое находится внутри моей деятельности?
Получите ваш root View
, отбросьте его до ViewGroup
, вызовите getChildCount()
и getChildAt()
и при необходимости перезапустите.
У меня более 200 просмотров, включая кнопок и изображений, поэтому я хочу быть доступ к ним с помощью цикла
Это довольно большое число Views
.
Ответ 2
Конкретно:
private void show_children(View v) {
ViewGroup viewgroup=(ViewGroup)v;
for (int i=0;i<viewgroup.getChildCount();i++) {
View v1=viewgroup.getChildAt(i);
if (v1 instanceof ViewGroup) show_children(v1);
Log.d("APPNAME",v1.toString());
}
}
И затем используйте функцию где-нибудь:
show_children(getWindow().getDecorView());
чтобы показать все Представления в текущей Деятельности.
Ответ 3
Попробуйте найти все представления, связанные с Activity.
введите следующую команду.
ViewGroup viewgroup=(ViewGroup)view.getParent();
viewgroup.getchildcount();
повторить цикл.
Мы получим результат.
Ответ 4
Вы можете использовать иерархический просмотр, он позволяет видеть иерархию представлений, в том числе созданные в коде. Основная причина заключается в отладке таких вещей. Последняя Android-студия теперь имеет эту функцию в Device Monitor, которая позволяет вам сделать дамп пользовательского интерфейса для его отладки.
Ответ 5
Хороший способ сделать это в Kotlin рекурсивно:
private fun View.getAllViews(): List<View> {
if (this !is ViewGroup || childCount == 0) return listOf(this)
return children
.toList()
.flatMap { it.getAllViews() }
.plus(this as View)
}