有没有办法在所有其他视图之上绘制视图?

时间:2012-12-29 11:34:45

标签: android android-layout android-view

我想知道是否有办法在所有其他视图之上绘制视图,即使它属于其他视图所涵盖的视图组?感谢。

3 个答案:

答案 0 :(得分:2)

我找到了解决方案,但是它仍然会产生一些不必要的效果,即在边界之外绘制的视图周围绘制一些黑色像素。好像我必须将这些视图移动到一个涵盖我需要的区域的父视图...无论如何,这是我做过的,以防有人想要尝试它:

@Override protected void dispatchDraw(Canvas canvas)
{
    Rect clip=new Rect(); getDrawingRect(clip);
    int saveCount=canvas.save(Canvas.CLIP_SAVE_FLAG);
    canvas.clipRect(clip,Region.Op.REPLACE);
    super.dispatchDraw(canvas);
    canvas.restoreToCount(saveCount);
}

该函数属于视图组,其中包含我想在其父级强制执行的原始边界之外绘制的子视图。如果要对视图使用不同的边界,则剪辑区域可以更改为任何内容。

答案 1 :(得分:0)

我之前有同样的问题,现在我从这个帖子得到了答案。 What is android.widget.FrameLayout

Android将应用程序放置到framelayout(其id为android.R.id.content),我们可以将其称为ContentView。你可以通过'hierarchyviewer'看到它,它是一个工具 / android-sdk / tools /允许检查视图层次结构。您可以看到您的应用程序放在FrameLayout中。

您可以从当前视图组中删除任何视图并添加到ContentView.So它将放在所有其他视图之上。

您可以执行以下操作:

//Remove view from current viewgroup
WebView mWebView = (WebView)findViewById(id);
ViewGroup currentParent = (ViewGroup)mWebView.getParent();
currentParent.removeView(mWebView);

//Add the view to ContentView(android.R.id.content)
FrameLayout contentView = (FrameLayout)this.getDecorView().findViewById(android.R.id.content);
FrameLayout.LayoutParams fl = new FrameLayout.LayoutParams(MATCH_PARENT,MATCH_PARENT);
contentView.addView(mWebView,fl);

希望这有用。

答案 2 :(得分:0)

使用ViewGroup.bringChildToFront(View child)。虽然这在LinearLayout中没有期望的效果,因为Z顺序直接链接到排序顺序,因此在这种情况下它只是将View移动到底部。