Cannot resolve method 'getViewRootImpl' in 'View'
时间: 2023-08-07 08:04:58 浏览: 144
解决Cannot resolve unit name的错误
非常抱歉,我的回答还有误。在Android 11及以上版本中,View类中确实没有getViewRootImpl()方法。如果您需要获取View的ViewRootImpl对象,可以使用View类中的getWindowToken()方法获取WindowToken,然后通过WindowManager类中的getWindowViewToken()方法获取View的WindowViewToken,最后通过ViewRootImpl类中的getViewRootImpl()方法获取ViewRootImpl对象,具体代码如下:
```
//获取当前Activity的WindowToken
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
View rootView = getWindow().getDecorView().getRootView();
IBinder windowToken = rootView.getWindowToken();
//获取View的WindowViewToken
IBinder viewWindowToken = wm.getWindowViewToken(windowToken);
//获取ViewRootImpl对象
ViewRootImpl viewRootImpl = ViewRootImpl.getViewRootImpl(view);
```
需要注意的是,这个方法只能在Activity中使用,如果您需要在非Activity的类中使用,可以通过传递Activity对象进来来获取WindowManager对象,然后再获取ViewRoot对象。同时,需要保证获取ViewRootImpl对象时View已经被添加到窗口中,否则可能会返回null。
阅读全文