2012-03-19 24 views
8

Obecnie używam ActionBarSherlock. Chcę uruchomić SecondActivity z MainActivity.Programowo wyłącz android: windowActionBarOverlay styl z paska działań

MainActivity używa paska akcji z włączonym stylem windowActionBarOverlay. SecondActivity używa paska działań z wyłączonym stylem windowActionBarOverlay. Oto jak wygląda mój XML.

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:debuggable="false" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/ThemeWithActionBarOverlay" 
     android:screenOrientation="nosensor" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".SecondActivity" 
     android:theme="@style/ThemeWithoutOverlay"> 
    </activity> 
</application> 

<resources> 
    <style name="ThemeWithActionBarOverlay" parent="@style/Theme.Sherlock"> 
     <item name="android:windowActionBarOverlay">true</item> 
     <item name="abIcon">@drawable/ic_home</item> 
     <item name="abTitleTextStyle">@style/ActionBarCompatTitle</item> 
    </style> 

    <style name="ThemeWithoutOverlay" parent="@style/Theme.Sherlock"> 
     <item name="abIcon">@drawable/ic_home</item> 
     <item name="abTitleTextStyle">@style/ActionBarCompatTitle</item> 
    </style> 
</resources> 

Jednak robiąc to, w SecondActivity, zdaję sobie sprawę, że nigdy nie można mieć w górę/wstecz przycisk w lewym górnym rogu na pasku akcji. Chociaż wyświetlana jest ikona, nie można jej nacisnąć. Tylko przy użyciu tego samego motywu (ThemeWithActionBarOverlay) jako MainActivity pojawi się tylko przycisk w górę/w tył. Jeśli jednak pozwolę, aby SecondActivity używał tego samego motywu co MainActivity, nie znajduję sposobu, aby wyłączyć zachowanie windowActionBarOverlay.

// SecondActivity 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.history_list_activity); 

    ActionBar actionBar = this.getActionBar(); 

    actionBar.setDisplayHomeAsUpEnabled(true); 
    // How to turn android:windowActionBarOverlay attribute to false during runtime? 
    // actionBar.??? 
} 

Moje pytania są

  1. Dlaczego aktywność dziecko musi użyć pasek działań z tego samego tematu jako rodziców, aby mieć właściwą góra/tył pokazany przycisk? Czy istnieje sposób, w jaki mogę używać różnych motywów, ale pojawia się przycisk up/back na aktywności dziecka?
  2. Czy można zmienić styl windowActionBarOverlay w czasie wykonywania?
+2

Czy twój drugi problem został rozwiązany? Też szukam tego samego. – Kameswari

Odpowiedz

4

Aby odpowiedzieć na pierwsze pytanie, nie trzeba mieć aktywności nadrzędnej i podrzędnej za pomocą tego samego motywu, aby przycisk "Up" działał. W rzeczywistości pracuję nad podobną aplikacją rodzicielską/podrzędną, a jej działanie działa dobrze przy użyciu dwóch różnych motywów (motyw bez nakładki dla rodzica i motyw pełnoekranowy (z nakładką) dla dziecka).

Musi być inny powód, dlaczego to nie działa ...

  • Upewnij zdefiniowaniu główną działalność być rodzicem drugiej działalności. Można to zrobić albo za pomocą kodu lub preferowanym sposobem, w AndroidManifest.xml:

    <activity 
        android:name=".SecondActivity" 
        <meta-data 
         android:name="android.support.PARENT_ACTIVITY" 
         android:value=".MainActivity" /> 
    </activity> 
    
  • Upewnij się, że w swojej działalności dziecka, masz aktywowane „w górę” nawigacja:

    final ActionBar actionBar = getSupportActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    

na drugie pytanie, spróbuj nadpisanie metody 'windowActionBarOverlay' w tego 'ThemeWithoutOverlay' motyw do false:

<style name="ThemeWithoutOverlay" parent="@style/Theme.Sherlock"> 
    <item name="android:windowActionBarOverlay">false</item> 
    <item name="windowActionBarOverlay">false</item>< 
    <item name="abIcon">@drawable/ic_home</item> 
    <item name="abTitleTextStyle">@style/ActionBarCompatTitle</item> 
</style> 
Powiązane problemy