【问题标题】:ActionBarCompat, supportRequestWindowFeature(Window.FEATURE_NO_TITLE) and expected behaviorActionBarCompat、supportRequestWindowFeature(Window.FEATURE_NO_TITLE) 和预期行为
【发布时间】:2013-10-14 06:22:26
【问题描述】:

我不确定使用 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 应用程序,其中一些活动使用操作栏,而其他活动则没有?他们不应该扩展同一个基类吗?

【问题讨论】:

    标签: android android-actionbar-compat


    【解决方案1】:

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

    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>
    

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

    但您很快就会发现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>
    

    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 之前不存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多