I know how to get the root view with View.getRootView(). I am also able to get the view from a button's onClick
event where the argument is a View. But how can I get the view in an activity?
This question is related to
android
android-activity
view
to get View of the current Activity
in any onClick we will be getting "View view", by using 'view' get the rootView.
View view = view.getRootView();
and to get View in fragment
View view = FragmentClass.getView();
If your activity's view is declared in xml (ex activity_root.xml
), open the xml and assign an id to the root view:
android:id="@+id/root_activity"
Now in your class, import the view using:
import kotlinx.android.synthetic.main.activity_root.root_activity
You can now use root_activity
as the view.
if you are in a activity, assume there is only one root view,you can get it like this.
ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
you can then cast it to your real class
or you could using
getWindow().getDecorView();
notice this will include the actionbar view, your view is below the actionbar view
Inside our activity we can get the root
view with:
ViewGroup rootView = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
or
View rootView = getWindow().getDecorView().getRootView();
This is what I use to get the root view as found in the XML file assigned with setContentView
:
final ViewGroup viewGroup = (ViewGroup) ((ViewGroup) this
.findViewById(android.R.id.content)).getChildAt(0);
anyview.getRootView();
will be the easiest way.
Just incase Someone needs an easier way:
The following code gives a view of the whole activity:
View v1 = getWindow().getDecorView().getRootView();
To get a certian view in the activity,for example an imageView inside the activity, simply add the id of that view you want to get:
View v1 = getWindow().getDecorView().getRootView().findViewById(R.id.imageView1);
Hope this helps somebody
In Kotlin we can do it a little shorter:
val rootView = window.decorView.rootView
I tested this in android 4.0.3, only:
getWindow().getDecorView().getRootView()
give the same view what we get from
anyview.getRootView();
com.android.internal.policy.impl.PhoneWindow$DecorView@#########
and
getWindow().getDecorView().findViewById(android.R.id.content)
giving child of its
android.widget.FrameLayout@#######
Please confirm.
For those of you who are using the Data Binding Library, to get the root of the current activity, simply use:
View rootView = dataBinding.getRoot();
And for Kotlin users, it's even simpler:
val rootView = dataBinding.root
Use this to simplify access in an Activity. Then you can directly refer to rootView
from the Activity, or activity.rootView
outside of it:
val Activity.rootView get() = window.decorView.rootView
If you'd like to add the same for Fragments for consistency, add:
val Fragment.rootView get() = view?.rootView
Source: Stackoverflow.com