作为我正在处理的应用程序的一部分,我正在尝试获取对ActionBar
容器视图的引用。我使用了来自this question的答案,只要有问题的Android设备运行的是API级别11或更高版本,它就能很好地适用于我。但是,应用程序需要尽可能早于API级别9(目标API级别为19),并且Gingerbread设备给我带来了问题。我最初使用Sherlock进行项目,但最近切换到了v7 compat库。我可以在Gingerbread设备(按钮工作等)上以正常方式查看操作栏并与其交互,但是当我尝试获取容器时它会失败。我正在使用的代码是这样的(注意 - 它在ActionBarActivity
的子类中运行):
private FrameLayout getActionBarContainer() {
FrameLayout result = null;
int resId = getResources().getIdentifier("action_bar_container", "id", "android");
try {
result = (FrameLayout)getWindow().getDecorView().findViewById(resId);
}
catch (Exception e) {
// If we get an exception, just eat it
}
return result;
}
在被问到之前回答几个问题:
ClassCastException
设法被抛出(它永远不应该,因为容器是FrameLayout
的子类。)ActionBar
引用(以及所有相关内容,比如我正在扩展的ActionBarActivity
超类)是v7 compat库版本,而不是标准库版本。action_bar_container
ID应存在于v7 compat库中,if this is any indication。此时我的想法已经过时了。我有什么简单的东西吗?任何建议将不胜感激,如果您需要更多背景/澄清,请告诉我。
答案 0 :(得分:4)
我认为你的错误是在
的最后一个参数上int resId = getResources().getIdentifier("action_bar_container", "id", "android");
对于api级别< 11,该软件包应该是您的应用程序包而不是plataform的软件包" android"