自定义View-获取界面的rootview

来源:互联网 发布:党章党规网络测试题 编辑:程序博客网 时间:2024/05/16 15:58

1获取activity or fragment的rootview

1.getRootView

getWindow().getDecorView().getRootView()
findViewById(android.R.id.content).getRootView();
都可以得到 com.android.internal.policy.impl.PhoneWindow$DecorView

2.

getWindow().getDecorView() 得到的是com.android.internal.policy.impl.PhoneWindow$DecorView

findViewById(android.R.id.content) 得到的是 android.support.v7.widget.ContentFrameLayout因为我activity 继承的是 AppCompatActivity,若是我activity直接改成直接继承Activity,则 得到的是android.widget.FrameLayout

3. 例子

    ViewGroup viewGroup1 = (ViewGroup) getWindow().getDecorView();    LogIotUtils.e(TAG, viewGroup1 + "");    ViewGroup viewGroup1_root = (ViewGroup) getWindow().getDecorView().getRootView();    LogIotUtils.e(TAG, viewGroup1_root + "");    ViewGroup viewGroup1_child = (ViewGroup) ((ViewGroup) getWindow().getDecorView()).getChildAt(0);    LogIotUtils.e(TAG, viewGroup1_child + "");    ViewGroup viewGroup2 = (ViewGroup) findViewById(android.R.id.content);    LogIotUtils.e(TAG, viewGroup2 + "");    ViewGroup viewGroup2_root = (ViewGroup) findViewById(android.R.id.content).getRootView();    LogIotUtils.e(TAG, viewGroup2_root + "");     ViewGroup viewGroup2_child = (ViewGroup) ((ViewGroup) findViewById(android.R.id.content).getRootView()).getChildAt(0);    LogIotUtils.e(TAG, viewGroup2_child + "");     mLoginsinaIV = (ImageView) findViewById(R.id.login_sina);    ViewGroup anyviewRoot = (ViewGroup) mLoginsinaIV.getRootView();    LogIotUtils.e(TAG, anyviewRoot + "");

com.android.internal.policy.impl.PhoneWindow$DecorView{420cd638 V.ED…. R…..ID 0,0-0,0}

com.android.internal.policy.impl.PhoneWindow$DecorView{420cd638 V.ED…. R…..ID 0,0-0,0}

android.widget.LinearLayout{420cf5e8 V.E….. ……I. 0,0-0,0}

android.support.v7.widget.ContentFrameLayout{420db6e8 V.ED…. ……I. 0,0-0,0 #1020002 android:id/content}

com.android.internal.policy.impl.PhoneWindow$DecorView{420cd638 V.ED…. R…..ID 0,0-0,0}

android.widget.LinearLayout{420cf5e8 V.E….. ……I. 0,0-0,0}

com.android.internal.policy.impl.PhoneWindow$DecorView{420cd638 V.ED…. R…..ID 0,0-0,0}

2.Get root view from current activity

根据上面的测试通过如下可以得到我activity的xml的根view。
getWindow().getDecorView()).getChildAt(0);

3. getLocationInWindow 和 getLocationOnScreen

getLocationInWindow
一个控件在其父窗口中的坐标位置
getLocationOnScreen
一个控件在其整个屏幕上的坐标位置

getLocationInWindow是以B为原点的C的坐标,而getLocationOnScreen以A为原点。

参考链接

http://stackoverflow.com/questions/7776768/android-what-is-android-r-id-content-used-for

0 0
原创粉丝点击