Sé cómo obtener la vista raíz con View.getRootView () . También puedo obtener la vista del onClick
evento de un botón donde el argumento es una Vista . Pero, ¿cómo puedo obtener la vista en una actividad ?
Sé cómo obtener la vista raíz con View.getRootView () . También puedo obtener la vista del onClick
evento de un botón donde el argumento es una Vista . Pero, ¿cómo puedo obtener la vista en una actividad ?
Respuestas:
Si necesita una vista raíz de su actividad (para que pueda agregar sus contenidos allí) use
findViewById(android.R.id.content).getRootView()
También se informó que en algunos dispositivos hay que usar
getWindow().getDecorView().findViewById(android.R.id.content)
en lugar.
Tenga en cuenta que, como Booger informó, esto puede estar detrás de la barra de navegación (con el botón Atrás, etc.) en algunos dispositivos (pero parece que en la mayoría de los dispositivos no lo está).
Si necesita obtener la vista que agregó a su actividad utilizando el setContentView()
método, como escribió Pottedmeat, puede usar
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
Pero mejor solo configure la identificación para esta vista en su diseño xml y use esta identificación en su lugar.
Esto es lo que uso para obtener la vista raíz como se encuentra en el archivo XML asignado con setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
ActionBar
también?
Probé esto en Android 4.0.3, solo:
getWindow().getDecorView().getRootView()
dar la misma vista de lo que obtenemos
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
y
getWindow().getDecorView().findViewById(android.R.id.content)
dando hijo de su
android.widget.FrameLayout@#######
Por favor confirmar.
En Kotlin podemos hacerlo un poco más cortos:
val rootView = window.decorView.rootView
Por si acaso Alguien necesita una forma más fácil:
El siguiente código ofrece una vista de toda la actividad:
View v1 = getWindow().getDecorView().getRootView();
Para obtener una vista certian en la actividad, por ejemplo, una imageView dentro de la actividad, simplemente agregue la identificación de esa vista que desea obtener:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Espero que esto ayude a alguien
findViewById(R.id.imageView1);
a la actividad si desea la vista específica.
Use esto para simplificar el acceso en una Actividad. Luego puede referirse directamente rootView
desde la Actividad, o activity.rootView
fuera de ella:
val Activity.rootView get() = window.decorView.rootView
Si desea agregar lo mismo para Fragmentos por consistencia, agregue:
val Fragment.rootView get() = view?.rootView
para ver la actividad actual
en cualquier onClick obtendremos "Ver vista", al usar 'ver' obtener el rootView.
Ver view = view.getRootView ();
y para obtener Ver en fragmento
Ver vista = FragmentClass.getView ();
Si está en una actividad, suponga que solo hay una vista raíz, puede obtenerla así.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
entonces puedes lanzarlo a tu clase real
o podrías usar
getWindow().getDecorView();
observe que esto incluirá la vista de la barra de acción, su vista está debajo de la vista de la barra de acción
Activity
clase.
Para aquellos de ustedes que están utilizando la Biblioteca de enlace de datos , para obtener la raíz de la actividad actual, simplemente use:
View rootView = dataBinding.getRoot();
Y para los usuarios de Kotlin, es aún más simple:
val rootView = dataBinding.root
Si la vista de su actividad se declara en xml (ex activity_root.xml
), abra el xml y asigne una identificación a la vista raíz:
android:id="@+id/root_activity"
Ahora en su clase, importe la vista usando:
import kotlinx.android.synthetic.main.activity_root.root_activity
Ahora puede usar root_activity
como vista.
setContentView()
y la vista que proporcionó ya es la raíz. Si necesita el control de esa vista, simplemente coloque una ID en XAML yfindViewById()
estaría bien.