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

时间:2015-09-23 08:57:29

标签: android canvas view android-actionbar z-index

我有一个View,它在Fragment中包含它,并将其配置为draw the content outside it using this

问题在于它可以在ActionBar和ActionBar选项卡上的任何地方使用。

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

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

我向所有父视图添加了android:clipChildren="false",但它不仅适用于ActionBar和ActionBar标签。

所需的观点:

enter image description here 但结果如下:

enter image description here

3 个答案:

答案 0 :(得分:2)

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

如果要创建自定义浮动项(可能用于教程或提示),应避免更改基本视图层次结构并更喜欢纯覆盖解决方案

PopupWindow正是您所需要的:

  

一个弹出窗口,可用于显示任意视图。

由于PopupWindow处于Activity级别,,它应覆盖当前Activity 中的所有内容。

  

弹出窗口是一个浮动容器,显示在   目前的活动。

您可以找到一个简单的示例here

答案 1 :(得分:0)

这是因为您的活动布局的层次顺序。您的ActionBar正在查看您的视图。您可以找到您的活动框架并在那里添加视图。

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,这些东西更容易实现。

答案 2 :(得分:0)

我最后删除了tabBar并用简单的按钮替换它以在标签之间切换并将它放在xml中的CustomLayout之前以便在它之前绘制。

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

<CustomLayout

....
/>