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

person Cheok Yan Cheng    schedule 19.03.2012    source источник
comment
Ваша вторая проблема решена? Я тоже ищу такой же.   -  person Kameswari    schedule 10.06.2014


Ответы (1)


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

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

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