Я знаю, как получить корневой вид с помощью View.getRootView () . Я также возможность получить вид с помощью кнопки в onClick
случае , когда аргумент является View . Но как я могу получить представление в деятельности ?
Я знаю, как получить корневой вид с помощью View.getRootView () . Я также возможность получить вид с помощью кнопки в onClick
случае , когда аргумент является View . Но как я могу получить представление в деятельности ?
Ответы:
Если вам нужен root вид вашей активности (чтобы вы могли добавить туда свой контент) используйте
findViewById(android.R.id.content).getRootView()
Также сообщалось, что на некоторых устройствах приходится использовать
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);
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@#######
Пожалуйста подтвердите.
В Kotlin мы можем сделать это немного короче:
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 view», используя «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 (ex activity_root.xml
), откройте xml и назначьте id для корневого представления:
android:id="@+id/root_activity"
Теперь в вашем классе импортируйте представление, используя:
import kotlinx.android.synthetic.main.activity_root.root_activity
Теперь вы можете использовать root_activity
в качестве представления.
setContentView()
и представленное вами представление уже является корневым. Если вам нужен дескриптор этого представления, просто добавьте к нему идентификатор в XAML, иfindViewById()
все будет в порядке.