放置/重叠(z-index)视图上方的操作栏选项卡

我有一个视图,它在包含它的Fragment外部绘制一些东西,我将它configuration为使用它在外部绘制内容 。

问题是,它在任何地方,但在ActionBar和ActionBar选项卡。

mActionBar.addTab( mActionBar.newTab() .setCustomView(t)); 

我正在使用appCompat,并以这种方式添加标签:

我添加了android:clipChildren="false"到所有父视图,但是它不适用于ActionBar和ActionBar选项卡。

期望的观点:

    在这里输入图像说明 但结果是这样的:

    在这里输入图像说明

    Related of "放置/重叠(z-index)视图上方的操作栏选项卡"

    没有完整的源代码,帮助你并不容易; 无论如何,我可以build议你一个替代方法,可能适合你的情况。

    如果您正在创build自定义浮动项目(可能用于教程或提示), 则应避免更改基本视图层次结构,并优先select纯叠加解决scheme

    PopupWindow正是你所需要的:

    一个可以用来显示任意视图的popup窗口。

    由于PopupWindowActivity级别起作用, 它应该覆盖当前Activity所有内容

    popup窗口是一个浮动容器,显示在当前活动的顶部。

    你可以在这里find一个简单的例子。

    我终于删除了TabBar,并用简单的buttonreplace它,以切换标签之间,并把它放在之前的xml的CustomLayout之前。

     <LinearLayout .... // tabs layout /> <CustomLayout .... /> 

    这是由于您的活动布局的分层次序发生的。 你的ActionBar被绘制在你的视图上。 你可以find你的活动框架,并在那里添加视图。

     private void addCircleView() { final FrameLayout frameLayoutRoot = (FrameLayout) getActivity().getWindow() .getDecorView().findViewById(android.R.id.content); View circleView = inflater.inflate( R.layout.my_circle_view, frameLayoutRoot, false); ViewGroup.MarginLayoutParams marginLayoutParams = ((ViewGroup.MarginLayoutParams) circleView.getLayoutParams()); marginLayoutParams.topMargin = getStatusBarHeight(getActivity()) + getActivity().getActionBar().getHeight() + getResources().getDimensionPixelSize(R.dimen.your_margin_top_circle); circleView.setLayoutParams(marginLayoutParams); frameLayoutRoot.addView(circleView); } public int getStatusBarHeight(Context context) { int result = 0; final int resourceId = context.getResources().getIdentifier( "status_bar_height", "dimen", "android"); if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; } 

    另外记得当你离开到其他片段时删除视图。

     frameLayoutRoot.removeView(circleView); 

    编辑:

    请注意,这是你应该在添加ActionBar (这是活动)级别上做的事情。 在这种情况下,您将不需要这些解决方法。 这些东西用ToolBar更方便实现。