ActionBarCompat,supportRequestWindowFeature(Window.FEATURE_NO_TITLE)和期望行为

3
我不确定使用ActionBarCompat和supportRequestWindowFeature(Window.FEATURE_NO_TITLE)时的预期行为。根据Android版本,存在两种不同的行为:
  • 在一个Android ICS(可能也适用于Android 3.0?)设备上,使用ActionBarCompat并调用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应用程序,其中一些活动使用操作栏,而其他活动没有操作栏,该怎么办?他们不应该扩展相同的基类吗?
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>

请注意,我已经将全局主题应用到了标签中,并且还将主题单独应用到了我的MainActivity类中,通过其自己的标签。这是我想要隐藏操作栏的唯一活动;在其他地方,我希望它可见(这就是为什么我没有将个别主题应用于任何其他活动,而是让它们从全局应用程序主题继承)。
但是你很快会发现Theme.AppCompat.Light.NoActionBar实际上不存在。这是因为我不得不自己创建该样式,这需要两个不同的styles.xml文件:

values/styles.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>

values-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:windowActionBar标志在Android API version 11之前不存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接