2012-08-14 2 views
7

application use actionbarsherlock, ma l'attività principale ottiene getsupportactionbar restituisce null. AndroidManifest.xml:actionbarsherlock getSupportActionBar() restituisce null in android4.0, ma in 2.3.3 è ok

<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()); 
    } 

risposta

9

stavo affrontando lo stesso problema poche ore fa, e si è scoperto, la La radice del problema era che ho usato un tema senza barra del titolo.

This reply da Jake Wharton, lo sviluppatore di ActionBarSherlock vi aiuterà a risolvere la cosa.

In breve: nelle versioni Android ICS e versioni successive, l'impostazione dell'attributo android:windowNoTitle influisce sulla visualizzazione della barra delle azioni (poiché è una funzionalità di base in tali versioni).

L'ABS lo ha inserito in windowNoTitle (senza spazio dei nomi/spazio dei nomi abs predefinito), quindi in base alla versione di Android su cui è installata l'applicazione, verrà visualizzata la schermata corretta.

Se avete la linea

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

nella tua definizione di stile, basta cambiare a

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

o completamente lasciarlo fuori/rimuoverla dal vostro tema (ass gestiranno correttamente!)

1

Ero di fronte a questo stesso problema ora, e ho trovato che l'uso di Android: theme = "@ style/Theme.Sherlock" è sufficiente.

se si utilizza

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

o

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

andrà in crash l'applicazione, può essere Jake risolvere questo problema in Theme.Sherlock.

ecco la mia soluzione ora:

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

e funziona bene su ICS + e pre-ICS, prova su Android 2.3.5,2.3.7, CM7, Android 4.0,4.1

0

Nel mio caso, devo affrontare questo problema quando imposto il tema android:theme="@style/Theme.Sherlock.NoActionBar", quindi chiamare getSupportActionBar() per ottenere la barra delle azioni. Se si desidera gestire la barra delle azioni, è sufficiente ruotarle su android:theme="@style/Theme.Sherlock.

0

Ho avuto lo stesso problema. Ho rimosso semplicemente la riga di codice qui sotto e il suo lavoro è come un incantesimo.

requestWindowFeature(Window.FEATURE_NO_TITLE);