AppCompatActivity 状态栏始终显示为黑色
Status bar always appears black with AppCompatActivity
我的状态栏总是显示黑色。我尝试了多次修复,但没有任何效果......我不敢相信这么简单的事情竟然如此复杂
这是我的 Style.xml:
<style name="AppTheme" parent="BaseTheme" />
<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/cobalt</item>
<item name="colorPrimaryDark">@color/cobalt_dark</item>
<item name="colorControlHighlight">@color/cobalt_light</item>
<item name="colorAccent">@color/cobalt_light</item>
</style>
这是我的 v21/style.xml:
<style name="AppTheme" parent="BaseTheme">
<item name="android:colorControlHighlight">@color/cobalt_light</item>
<item name="android:statusBarColor">@color/cobalt_light</item>
</style>
这是我的 Activity:
public class ActivityLogin extends AppCompatActivity {
//...
}
我的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.plante.android.cobalt"
android:versionName="7">
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="21" />
<application
android:name=".CobaltApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme”>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:windowSoftInputMode="adjustResize"
android:name=".activityv2.ActivityLogin"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activityv2.ActivityHome"
android:label="Home"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tag_filter" />
</activity>
<activity
android:name=".activityv2.ActivitySplash"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
尝试使用此属性更新您的 v21/style:
<item name="android:statusBarColor">@color/color_primary</item>
更新:
在与作者讨论后,我们决定使用 targetSdkVersion=18。我们可以从 \sdk\extras\android\support\v7\appcompat\res\values\attrs.xml
中注意到
<!-- Dark variant of the primary branding color. By default, this is the
color applied to the status bar (via statusBarColor) and navigation bar (via
navigationBarColor). -->
<attr name="colorPrimaryDark" format="color" />
由于 statusBarColor 属性 添加在 API 级别 21 中,因此没有记录更改状态栏的方法棒棒糖前的颜色。
您应该将您的样式 "BaseTheme" 重命名为 "AppTheme.Base" 以便它重载基本应用程序主题。
或者在清单文件的标签中添加参数:
android:theme="@style/BaseTheme"
如果解决方案被证明是虚幻的,您始终可以通过编程设置颜色。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.WHITE);
}
好的,问题来了:
defaultConfig {
applicationId "com.plante.android.cobalt"
minSdkVersion 17
targetSdkVersion 18
versionCode 7
multiDexEnabled false
versionName "7"
}
我应该设置 api 21 及以上才能正常工作...
我的状态栏总是显示黑色。我尝试了多次修复,但没有任何效果......我不敢相信这么简单的事情竟然如此复杂
这是我的 Style.xml:
<style name="AppTheme" parent="BaseTheme" />
<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/cobalt</item>
<item name="colorPrimaryDark">@color/cobalt_dark</item>
<item name="colorControlHighlight">@color/cobalt_light</item>
<item name="colorAccent">@color/cobalt_light</item>
</style>
这是我的 v21/style.xml:
<style name="AppTheme" parent="BaseTheme">
<item name="android:colorControlHighlight">@color/cobalt_light</item>
<item name="android:statusBarColor">@color/cobalt_light</item>
</style>
这是我的 Activity:
public class ActivityLogin extends AppCompatActivity {
//...
}
我的清单
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.plante.android.cobalt"
android:versionName="7">
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="21" />
<application
android:name=".CobaltApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme”>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:windowSoftInputMode="adjustResize"
android:name=".activityv2.ActivityLogin"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activityv2.ActivityHome"
android:label="Home"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.nfc.action.TECH_DISCOVERED" />
</intent-filter>
<meta-data
android:name="android.nfc.action.TECH_DISCOVERED"
android:resource="@xml/nfc_tag_filter" />
</activity>
<activity
android:name=".activityv2.ActivitySplash"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
尝试使用此属性更新您的 v21/style:
<item name="android:statusBarColor">@color/color_primary</item>
更新: 在与作者讨论后,我们决定使用 targetSdkVersion=18。我们可以从 \sdk\extras\android\support\v7\appcompat\res\values\attrs.xml
中注意到<!-- Dark variant of the primary branding color. By default, this is the
color applied to the status bar (via statusBarColor) and navigation bar (via
navigationBarColor). -->
<attr name="colorPrimaryDark" format="color" />
由于 statusBarColor 属性 添加在 API 级别 21 中,因此没有记录更改状态栏的方法棒棒糖前的颜色。
您应该将您的样式 "BaseTheme" 重命名为 "AppTheme.Base" 以便它重载基本应用程序主题。
或者在清单文件的标签中添加参数:
android:theme="@style/BaseTheme"
如果解决方案被证明是虚幻的,您始终可以通过编程设置颜色。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.WHITE);
}
好的,问题来了:
defaultConfig {
applicationId "com.plante.android.cobalt"
minSdkVersion 17
targetSdkVersion 18
versionCode 7
multiDexEnabled false
versionName "7"
}
我应该设置 api 21 及以上才能正常工作...