致电
if (getSupportActionBar() != null)
getSupportActionBar().hide();
或只是:
getActionBar()
在android.support.v7.app.ActionBarActivity中的我得到了这样的异常:
...
java.lang.NullPointerException
at android.support.v7.app.ActionBarImplICS.hide(ActionBarImplICS.java:302)
at android.support.v7.app.ActionBarImplJB.hide(ActionBarImplJB.java:20)
...
修改 它只是在活动有主题时发生:
<style name="MyTheme" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
</style>
注意:
getSupportActionBar()
不返回null
答案 0 :(得分:6)
遇到同样的问题,但我使用代码在下面设置全屏和noActionbar而不是xml中的主题:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
setContentView(R.layout.page_welcome);
initViews();
}
此代码在ICS之前运行良好,但由于ICS上方的NullPointException导致崩溃,经过一些实验,我得到了解决方案:删除一行代码,不设置标题如下:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
getSupportActionBar().hide();
setContentView(R.layout.page_welcome);
initViews();
}
然后它适用于所有平台。 :)
答案 1 :(得分:2)
据我了解
if (getSupportActionBar() != null)
getSupportActionBar().hide();
不正确!
Becouse getSupportActionBar()
返回非空实例
(android.support.v7.app.ActionBarImplICS)
之后我们可以调用hide函数(getSupportActionBar().hide();
)
但是在这个函数里面我们会有NullPointerException,因为里面是变量mActionBar
android.support.v7.app.ActionBarImplICS instance == null
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/support/v7/app/ActionBarImplICS.java#302
据我了解android.support.v7.app.ActionBarImplICS的构造函数
mActionBar = activity.getActionBar();
返回null,因为我们的Activity没有通过Theme的ActionBar
<style name="MyTheme" parent="Theme.AppCompat.Light">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
</style>
答案 2 :(得分:1)
简而言之:
<item name="android:windowNoTitle">true</item>
仅可与Activity
一起使用,不能与ActionBarActivity
另一方面,getSupportActionBar().hide();
可与ActionBarActivity
答案 3 :(得分:0)
对于ICS之前和ICS之后都有Theme.AppCompat.Light
肯定会引起问题。这样做的方法是在MyTheme
中设置:
values/styles.xml
。这将从Theme.AppCompat.Light
延伸。例如:<style name="MyTheme" parent="Theme.AppCompat.Light">
values-v11/styles.xml
。这将从Holo
主题延伸。例如:<style name="MyTheme" parent="android:Theme.Holo.Light">
通过这种方式,Android可以根据运行时设备主机API了解要加载的主题类型。
从getActionBar()
延伸后,请勿致电ActionBarActivity
。在post-ICS设备上,这将运行,但对于较低的API设备,您将获得运行时not supported method
异常或类似的东西。