我使用ActionBar
标签导航模式和ViewPager
。这在较新版本的Android中运行良好,但在Android 4.0.3上,标签位于ActionBar
的顶部而不是下方。
如果我使用ActionBar.SetDisplayShowHomeEnabled(true)
,则问题似乎已得到解决。但是,向上导航则不起作用。
我的代码如下
ActionBar.SetTitle(Resource.String.DocumentDetails);
ActionBar.SetDisplayHomeAsUpEnabled(true);
ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;
SetContentView(Resource.Layout.Main);
ActionBar.Tab tab = ActionBar.NewTab();
tab.SetText("tab1");
tab.TabSelected += (sender, args) => {
// Do something when tab is selected
};
ActionBar.AddTab(tab);
tab = ActionBar.NewTab();
tab.SetText("tab2");
tab.TabSelected += (sender, args) => {
// Do something when tab is selected
};
ActionBar.AddTab(tab);
答案 0 :(得分:0)
这是在实际设备上吗?我已经在模拟器中测试了您的代码并且无法重现。但是,似乎其他几个人向Google报告了这一情况:https://code.google.com/p/android/issues/detail?id=36191
所以有几个想法来解决这个问题。而不是使用SetDisplayHomeAsUpEnabled
尝试使用DisplayOptions
属性:
ActionBar.DisplayOptions = ActionBarDisplayOptions.ShowHome |
ActionBarDisplayOptions.HomeAsUp |
ActionBarDisplayOptions.ShowTitle;
在这种情况下,重要的是ActionBarDisplayOptions.ShowHome
,它会强制显示主页图标,而ActionBarDisplayOptions.HomeAsUp
会执行SetDisplayHomeAsUpEnabled(true)
所做的事情。最后一个我想你可以猜到。
如果这没有帮助。该问题线程中有一个答案,建议使用扩展方法将标签项设置为嵌入ActionBar
。但是,这看起来好像是在平板电脑上运行。代码如下:
using Java.Lang;
using Java.Lang.Reflect;
namespace SomeNamespace
{
public class ActionBarUtils
{
public static void SetHasEmbeddedTabs(Object inActionBar, bool hasEmbeddedTabs)
{
var actionBarClass = inActionBar.Class;
if ("android.support.v7.app.ActionBarImplJBMR2" == actionBarClass.Name)
{
actionBarClass = actionBarClass.Superclass.Superclass;
}
else if ("android.support.v7.app.ActionBarImplJB" == actionBarClass.Name)
{
actionBarClass = actionBarClass.Superclass;
}
try
{
var actionBarField = actionBarClass.GetDeclaredField("mActionBar");
actionBarField.Accessible = true;
inActionBar = actionBarField.Get(inActionBar);
actionBarClass = inActionBar.Class;
}
catch (IllegalAccessException) { }
catch (IllegalArgumentException) { }
catch (NoSuchFieldException) { }
try
{
var method = actionBarClass.GetDeclaredMethod("setHasEmbeddedTabs", new[] { Boolean.Type });
method.Accessible = true;
method.Invoke(inActionBar, new Boolean(hasEmbeddedTabs));
}
catch (NoSuchMethodException) { }
catch (InvocationTargetException) { }
catch (IllegalAccessException) { }
catch (IllegalArgumentException) { }
}
}
}
然后可以在Activity
:
ActionBarUtils.SetHasEmbeddedTabs(ActionBar, true);