获取当前 Activity 的 Surface 对象,但不知道布局文件中定义 SurfaceView 的 ID
时间: 2024-04-15 15:08:33 浏览: 15
可以通过以下步骤获取当前 Activity 中的 SurfaceView 对象:
1. 使用 getWindow().getDecorView() 方法获取当前 Activity 的根视图。
2. 调用根视图的 findViewsWithText() 方法,查找包含 SurfaceView 类型的子视图。
3. 遍历查找结果,找到第一个 SurfaceView 对象并返回它的 SurfaceHolder 对象。
代码示例:
```java
SurfaceHolder getSurfaceHolder(Activity activity) {
View decorView = activity.getWindow().getDecorView();
ArrayList<View> surfaceViews = new ArrayList<>();
decorView.findViewsWithText(surfaceViews, "SurfaceView", View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);
for (View view : surfaceViews) {
if (view instanceof SurfaceView) {
SurfaceView surfaceView = (SurfaceView) view;
return surfaceView.getHolder();
}
}
return null;
}
```
这个方法会返回当前 Activity 中的第一个 SurfaceView 对象的 SurfaceHolder 对象。如果当前 Activity 中没有 SurfaceView,那么返回 null。