Android addView命令不工作

Android addView命令不工作,android,android-layout,android-view,Android,Android Layout,Android View,我正在将cameraView、glSurfaceView和ImageView按该顺序添加到relativeLayout,但结果将它们从上到下排列(cameraView、ImageView、glSurfaceView)有什么具体原因吗?是因为glSurfaceView在内部重新绘制了它的自身吗 代码snippit用于添加: 相对添加视图(glView) 问题是。。如何确保imageView始终位于顶部 我认为GLSurfaceView的onDrawFrame方法将GLSurfaceView带到了视

我正在将
cameraView
glSurfaceView
ImageView
按该顺序添加到
relativeLayout
,但结果将它们从上到下排列(
cameraView
ImageView
glSurfaceView
)有什么具体原因吗?是因为
glSurfaceView
在内部重新绘制了它的自身吗

代码snippit用于添加:

相对添加视图(glView)

问题是。。如何确保imageView始终位于顶部

我认为
GLSurfaceView的
onDrawFrame
方法将
GLSurfaceView
带到了视图列表的顶部,因此我从onDrawFrame方法添加了对main活动上公共方法的回调,如下所示:

public void ajustOverlay(){
        imageView.bringToFront();
        Log.v("parent: ", "ajust overlay");
    } 

这似乎仍然无法将
图像视图保持在顶部

您添加的视图没有足够的规则进行相对性调整,这可能就是结果不是您期望的结果的原因。 例如,必须定义
RelativeLayout.BELOW
规则,以确保一个视图位于另一个视图的下方

首先,您应该尝试用XML构建布局,以便能够在Eclipse上查看结果。 然后通过编程方式应用文件中的所有规则,或者借助
LayoutInflater
轻松构建XML层次结构。 我真的建议你的解决方案,如果你可以,出于许多原因(维护,重新格式化,多屏幕处理,…)


您还应该阅读关于RelativeLayout的完整文档以正确设置格式:

您添加的视图没有足够的规则用于RelativeLayout,这可能就是结果不是您期望的结果的原因。 例如,必须定义
RelativeLayout.BELOW
规则,以确保一个视图位于另一个视图的下方

首先,您应该尝试用XML构建布局,以便能够在Eclipse上查看结果。 然后通过编程方式应用文件中的所有规则,或者借助
LayoutInflater
轻松构建XML层次结构。 我真的建议你的解决方案,如果你可以,出于许多原因(维护,重新格式化,多屏幕处理,…)


您还应该阅读有关RelativeLayout的完整文档以正确设置其格式:

我在尝试将三个常规
线性布局
对象并排放置在父
RelativeLayout
中时遇到了相同的排序问题。要纠正此问题,只需在调用
addView
方法时再添加一个参数即可。它是三个参数中的第二个参数,表示要添加视图的顺序的索引

所以这应该对你有用:

rel.addView(camPreview, 0, camParams);
rel.addView(glView, 1, glParams);
rel.addView(imageView,2, imageParams);

我在尝试将三个常规
LinearLayout
对象并排放置在父
RelativeLayout
中时遇到了相同的排序问题。要纠正此问题,只需在调用
addView
方法时再添加一个参数即可。它是三个参数中的第二个参数,表示要添加视图的顺序的索引

所以这应该对你有用:

rel.addView(camPreview, 0, camParams);
rel.addView(glView, 1, glParams);
rel.addView(imageView,2, imageParams);

好吧,在尝试了上述解决方案和其他各种解决方案之后,我的头撞在混凝土上已经快一年了,我真的让它工作了。。关键是在添加glView之前添加以下行

glView.setZOrderMediaOverlay(true);
rel.addView(camPreview, camParams);
rel.addView(glView, glParams);
rel.addView(imageView, imageParams);

好吧,在尝试了上述解决方案和其他各种解决方案之后,我的头撞在混凝土上已经快一年了,我真的让它工作了。。关键是在添加glView之前添加以下行

glView.setZOrderMediaOverlay(true);
rel.addView(camPreview, camParams);
rel.addView(glView, glParams);
rel.addView(imageView, imageParams);

也许您可以使用视图层次工具?也许您可以使用视图层次工具?RelativeLayout.bellow将一个视图从下到上对齐,对吗?这不是我想做的,我想把一个视图覆盖在另一个视图上,这样
相对视图就适合你的情况了。您是否使用或能否使用
LayoutInflater
实例化视图?我没有使用LayoutInflater,因为没有现有的xml布局。我这样做了:RelativeLayout rel=new RelativeLayout(this);//设置为主视图setContentView(rel);我认为问题在于GLSURFACHEVIEW有一个OnDraw方法,并且总是以某种方式将它带到最前面。。有没有办法确保它保持在imageviewRelativeLayout的下方。下方对齐一个视图,从底部到另一个视图的顶部正确吗?这不是我想做的,我想把一个视图覆盖在另一个视图上,这样
相对视图就适合你的情况了。您是否使用或能否使用
LayoutInflater
实例化视图?我没有使用LayoutInflater,因为没有现有的xml布局。我这样做了:RelativeLayout rel=new RelativeLayout(this);//设置为主视图setContentView(rel);我认为问题在于GLSURFACHEVIEW有一个OnDraw方法,并且总是以某种方式将它带到最前面。。有没有办法确保它位于imageview下方