actionbarsherlock getSupportActionBar()在android4.0中返回null,但在2.3.3中没问题

时间:2012-08-14 02:11:41

标签: actionbarsherlock

应用程序使用actionbarsherlock,但主要活动get getsupportactionbar返回null。 的AndroidManifest.xml:

    <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Light1Theme" >
    <activity
        android:name=".activity.LogonActivity"
        android:configChanges="orientation|keyboardHidden"
        android:windowSoftInputMode="adjustUnspecified|stateHidden" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    ...

的themes.xml:

    <style name="Light1Theme" parent="Theme.Sherlock.Light">

LogonActivity.ava

    extends SherlockActivity implements OnSharedPreferenceChangeListener {
    ...
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //requestWindowFeature(Window.FEATURE_NO_TITLE);
    //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN);       

    setContentView(R.layout.logon);

    try{
    final ActionBar ab = getSupportActionBar();
    //return null
    ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.ab_bg_black));
    getSupportActionBar().setIcon(R.drawable.hospital);
    }catch(Exception e){
        Log.e("", e.getMessage());
    }

4 个答案:

答案 0 :(得分:9)

几小时前我遇到了同样的问题,事实证明,问题的根源在于我使用的主题没有标题栏。

来自Jake Wharton的

This reply,actionbarsherlock的开发者将帮助您解决问题。

简而言之:在Android版本的ICS和更新版本中,设置属性android:windowNoTitle将影响操作栏的显示(因为它是这些版本的核心功能)。

ABS已将其包装到windowNoTitle(没有命名空间/默认abs命名空间),因此根据安装应用程序的Android版本,您将获得正确的显示。

如果你有行

<item name="android:windowNoTitle">true</item>

在您的样式定义中,只需将其更改为

即可
<item name="windowNoTitle">true</item>

或完全将其删除/从主题中删除(abs会正确处理它!)

答案 1 :(得分:1)

我现在面临同样的问题,我发现使用android:theme =“@ style / Theme.Sherlock”就够了。

如果您使用

<item name="windowNoTitle">true</item>

<item name="android:windowNoTitle">true</item>

它会崩溃应用程序,可能是Jake在Theme.Sherlock中修复它。

所以现在这是我的解决方案:

<application
    android:name="XXXXApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Sherlock" >

它适用于ICS +和pre-ICS,测试android 2.3.5,2.3.7,CM7,android 4.0,4.1

答案 2 :(得分:0)

就我而言,当我设置主题android:theme="@style/Theme.Sherlock.NoActionBar"时,我会遇到此问题,然后调用getSupportActionBar()来获取操作栏。如果您想管理操作栏,只需将其转为android:theme="@style/Theme.Sherlock

答案 3 :(得分:0)

我遇到了同样的问题。我简单地删除了下面的代码行,它的工作就像一个魅力。

requestWindowFeature(Window.FEATURE_NO_TITLE);