3

我不确定使用 ActionBarCompat 和 supportRequestWindowFeature(Window.FEATURE_NO_TITLE) 时的预期行为。根据 Android 版本,我看到两种不同的行为:

  • 在使用 ActionBarCompat 的 Android ICS(也可能来自 Android 3.0?)设备上,调用 supportRequestWindowFeature(Window.FEATURE_NO_TITLE) 将隐藏组合的标题栏/操作栏
  • 在 Android 2.3 设备上,即使调用了 supportRequestWindowFeature(Window.FEATURE_NO_TITLE),操作栏仍然可见。

一些附加信息:我的活动扩展了 android.support.v7.app.ActionBarActivity 并且我的应用使用了@style/Theme.AppCompat.Light 主题。在 setContentView() 之前调用 supportRequestWindowFeature(Window.FEATURE_NO_TITLE)。我从不调用 getSupportActionBar().show() 或 hide()。

那么,预期的行为是什么?当我使用 ABS 调用 requestWindowFeature(Window.FEATURE_NO_TITLE) 时,无论 Android 版本如何,都会隐藏标题栏/操作栏。

我将如何拥有一个 android 应用程序,其中一些活动使用操作栏,而其他活动则没有?他们不应该扩展同一个基类吗?

4

1 回答 1

0

所以我找到了一个解决方案,但它使用通过 AndroidManifest 应用的样式(因此不需要代码)。请记住,这几乎肯定只有在您使用AppCompat 库时才有效。

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="..."
    android:versionCode="1"
    android:versionName="1.0">

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="false"
        android:icon="@drawable/launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.AppCompat.Light.DarkActionBar">

        <activity
            android:label="@string/log_in"
            android:name=".activities.LogInActivity"
            android:parentActivityName=".activities.MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".activities.MainActivity" />
        </activity>

        <activity
            android:label="@string/app_name"
            android:name=".activities.MainActivity"
            android:theme="@style/Theme.AppCompat.Light.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:label="@string/sign_up"
            android:name=".activities.SignUpActivity"
            android:parentActivityName=".activities.MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".activities.MainActivity" />
        </activity>

    </application>

</manifest>

请注意我如何将全局主题应用目录应用于<application>标签,然后还有一个主题MainActivity通过自己的<activity>标签单独应用于我的班级。这是我希望隐藏操作栏的唯一活动;我希望它在其他任何地方都可见(这就是为什么我没有将单独的主题应用于我的任何其他活动,而是让它们从全局应用程序主题继承)。

但你很快就会发现它Theme.AppCompat.Light.NoActionBar实际上并不存在。这是因为我必须自己创建该样式,这需要两个不同的styles.xml文件:

值/样式.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.AppCompat.Light.NoActionBar" parent="Theme.AppCompat.Light">
        <item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

值-v11/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="Theme.AppCompat.Light.NoActionBar" parent="Theme.AppCompat.Light">
        <item name="android:windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
    </style>
</resources>

您必须为此使用两个不同styles.xml的文件,因为该标志在Android API 版本 11android:windowActionBar之前不存在。

于 2014-03-06T20:06:41.880 回答