2012-03-19 21 views
8

Actualmente, estoy usando ActionBarSherlock. Quiero iniciar SecondActivity desde MainActivity.Desactivar programáticamente Android: estilo WindowActionBarOverlay de la barra de acciones

MainActivity está utilizando la barra de acciones con el estilo windowActionBarOverlay activado. SecondActivity está utilizando la barra de acciones con el estilo windowActionBarOverlay apagado. Por lo tanto, así es como se ve mi 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> 

Sin embargo, al hacerlo, en SecondActivity, me doy cuenta que no puedo tener un botón arriba/hacia atrás en la parte superior izquierda de la barra de acción. Aunque se muestra un icono, no se puede presionar. Solo al usar el mismo tema atrás (ThemeWithActionBarOverlay) como MainActivity, solo se mostrará el botón arriba/atrás. Sin embargo, si dejo que SecondActivity use el mismo tema que MainActivity, no encuentro manera de desactivar el comportamiento 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.??? 
} 

Mis preguntas son

  1. Por qué la actividad niño tiene que utilizar la barra de acción con el mismo tema que el padre del, con el fin de tener adecuada hacia arriba/hacia atrás muestra el botón? ¿Hay alguna manera de que pueda usar diferentes temas, pero aparece el botón arriba/atrás en la actividad del niño?
  2. ¿Es posible cambiar el estilo windowActionBarOverlay durante el tiempo de ejecución?
+2

¿Se ha resuelto su segundo problema? También estoy buscando lo mismo. – Kameswari

Respuesta

4

Para responder a su primera pregunta, no es necesario que la actividad principal y secundaria use el mismo tema para que funcione el botón "Subir". De hecho, estoy trabajando en una aplicación de actividad parental/secundaria similar, y funciona perfectamente usando dos temas diferentes (un tema sin superposición para el padre y el tema de pantalla completa (con superposición) para el niño).

Tiene que haber otra razón por la que no está funcionando ...

  • Asegúrese de que ha definido MainActivity a ser el padre de la segunda actividad. Puede hacerlo ya sea por el código, o la manera preferida, en el AndroidManifest.xml:

    <activity 
        android:name=".SecondActivity" 
        <meta-data 
         android:name="android.support.PARENT_ACTIVITY" 
         android:value=".MainActivity" /> 
    </activity> 
    
  • Asegúrese de que la actividad en su hijo, se ha activado el 'arriba' de navegación:

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

a su segunda pregunta, trate de anular el 'windowActionBarOverlay' en el 'ThemeWithoutOverlay' tema a falso:

<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> 
Cuestiones relacionadas