我有一个RelativeLayout,我在顶部有控件。在运行时,我想显示一个MapView,它刚刚添加到Layout中,隐藏了它下面的所有其他视图,但不是顶部的控件。 稍后MapView再次隐藏。
layout_main.bringChildToFront(layout_main.findViewWithTag("paramsUI"));
layout_main.invalidate();
findViewByTag似乎工作,我已经在调试模式下检查过。 我也尝试过:
layout_main.findViewWithTag("paramsUI").bringToFront();
我还有别的什么要做吗?
编辑:对不起,问题是,由于bringToFront()调用,MapView隐藏了控制栏,控制栏应位于所有视图的顶部。
答案 0 :(得分:0)
您可以将RelativeLayout包装在LinearLayout中,并将控件放在LinearLayout中。这样,无论你对RelativeLayout做什么,控件都没问题。
答案 1 :(得分:0)
您可能需要考虑使用FrameLayout
而不是RelativeLayout
。 RelativeLayout
更适用于部分视图,而FrameLayout
则针对全屏应用进行了优化。这样,您就可以控制项目的绘制位置。
子视图以堆栈形式绘制,最近添加的子项位于顶部。 FrameLayout的大小是其最大子项(加上填充)的大小,可见或不可见(如果FrameLayout的父级允许)。仅当setConsiderGoneChildrenWhenMeasuring()设置为true时,GONE视图才会用于调整大小。
我希望这有帮助!如果您有更多问题,请与我们联系。
答案 2 :(得分:0)
对于Android 4.x,您需要在两次调用之间调用requestLayout():
layout_main.bringChildToFront(layout_main.findViewWithTag("paramsUI"));
layout_main.requestLayout();
layout_main.invalidate();
答案 3 :(得分:0)
您可以尝试使用此代码。似乎适用于Android的新旧版本
if (android.os.Build.VERSION.SDK_INT >= 21) //Lollipop
{
view.setZ(5);
for (int i = 0; i < view.getParent().getChildCount(); i++)
{
if(view != view.getParent().getChildAt(i))
{
view.getParent().getChildAt(i).setZ(4);
}
}
}
view.bringToFront();
for (int i = 0; i < view.getParent().getChildCount(); i++)
{
view.getParent().getChildAt(i).invalidate();
}
view.getParent().requestLayout();
view.getParent().invalidate();