Программно отключить Android: стиль windowActionBarOverlay из панели действий - PullRequest
8 голосов
/ 19 марта 2012

В настоящее время я использую 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 я понимаю, что никогда не смогу получить кнопку вверх / назадв левом верхнем углу панели действий.Несмотря на то, что отображается значок, он не нажимается.Только при использовании кнопки «Назад» той же темы (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 во время выполнения?

1 Ответ

4 голосов
/ 08 января 2013

Чтобы ответить на ваш первый вопрос, вам не нужно, чтобы родитель и ребенок использовали одну и ту же тему для работы кнопки «Вверх». На самом деле я работаю над аналогичным приложением «родитель / потомок», и оно отлично работает, используя две разные темы (тема без наложения для родителя и полноэкранная тема (с наложением) для ребенка).

Должна быть еще одна причина, почему она не работает ...

  • Убедитесь, что вы определили 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);
    

По второму вопросу попробуйте переопределить 'windowActionBarOverlay' в теме 'ThemeWithoutOverlay' на 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>
...