3

ActionBarCompat と supportRequestWindowFeature(Window.FEATURE_NO_TITLE) を使用した場合の予想される動作がわかりません。Android のバージョンに応じて、次の 2 つの異なる動作が見られます。

  • 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 テーマを使用します。supportRequestWindowFeature(Window.FEATURE_NO_TITLE) は setContentView() の前に呼び出されます。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しかし、実際には存在しないことがすぐにわかります。これは、そのスタイルを自分で作成する必要があったためです。これには 2 つの異なるstyles.xmlファイルが必要です。

値/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>

値-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>

フラグはAndroid API バージョン 11より前には存在しなかっstyles.xmlたため、これには 2 つの異なるファイルを使用する必要があります。android:windowActionBar

于 2014-03-06T20:06:41.880 に答える