8

目前,我正在使用ActionBarSherlock。我想SecondActivityMainActivity.

MainActivity正在使用windowActionBarOverlay打开样式的操作栏。SecondActivity正在使用windowActionBarOverlay关闭样式的操作栏。因此,这就是我的 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>

但是,通过这样做SecondActivity,我意识到我永远无法在操作栏的左上角设置向上/后退按钮。虽然显示了图标,但它是不可按下的。只有使用相同的主题(ThemeWithActionBarOverlay)作为MainActivity后退,才会显示上/后退按钮。但是,如果我让SecondActivity使用与 相同的主题MainActivity,我会发现无法关闭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.??? 
}

我的问题是

  1. 为什么子活动必须使用与父母相同主题的操作栏,才能显示正确的上/后按钮?有什么方法可以使用不同的主题,但子活动上会出现上/后退按钮?
  2. 是否可以windowActionBarOverlay在运行时转换样式?
4

1 回答 1

4

要回答您的第一个问题,您不需要让父子活动使用相同的主题来使“向上”按钮起作用。事实上,我正在开发一个类似的父/子活动应用程序,它使用两个不同的主题(父主题没有覆盖的主题和子主题的全屏主题(有覆盖))工作得很好。

一定有其他原因导致它无法正常工作...

  • 确保您已将MainActivity定义为第二个活动的父项。您可以通过代码或首选方式在AndroidManifest.xml中执行此操作:

    <activity
        android:name=".SecondActivity" 
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
    
  • 确保在您的子活动中,您已激活“向上”导航:

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

对于您的第二个问题,请尝试将' ThemeWithoutOverlay'主题中的'windowActionBarOverlay' 覆盖为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>
于 2013-01-07T23:33:13.880 回答