windowActionBarOverlay

windowActionBarOverlay

目前,我正在使用ActionBarSherlock。我想从SecondActivity启动MainActivity
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中,我意识到我永远无法在操作栏的左上方有一个向上/向后按钮。尽管显示了图标,但它不可按。仅通过使用与MainActivity相同的主题(ThemeWithActionBarOverlay),才会显示向上/向后按钮。但是,如果我让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.???
}

我的问题是
  • 为什么子 Activity 必须使用具有与父主题相同主题的操作栏,才能显示正确的上/后按钮?有什么方法可以使用不同的主题,但是在子 Activity 中出现了上/后按钮?
  • 是否可以在运行时打开windowActionBarOverlay样式?
  • 最佳答案

    要回答您的第一个问题,您无需使用相同的主题进行父项和子项 Activity ,“向上”按钮即可正常工作。实际上,我正在开发一个类似的父/子 Activity 应用程序,并且使用两个不同的主题(父级没有覆盖的主题和子级的全屏主题(有覆盖))可以很好地工作。

    它不能正常工作还必须有另一个原因...

  • 确保已将 MainActivity 定义为第二个 Activity 的父级。您可以在 AndroidManifest.xml 中通过代码或首选方式进行操作:
    <activity
        android:name=".SecondActivity"
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
    
  • 确保在您的子 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>
    

    10-04 12:48