我有一个View,它在Fragment中包含它,并将其配置为draw the content outside it using this。
问题在于它可以在ActionBar和ActionBar选项卡上的任何地方使用。
mActionBar.addTab(
mActionBar.newTab()
.setCustomView(t));
我正在使用appCompat并以这种方式添加标签:
我向所有父视图添加了android:clipChildren="false"
,但它不仅适用于ActionBar和ActionBar标签。
所需的观点:
答案 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
....
/>