tyc*_*czj 140 android android-5.0-lollipop android-toolbar
我在一个活动我使用工具栏更改颜色Palette,但使用5.0的设备ActionBarActivity的status bar颜色是我的颜色colorPrimaryDark我的活动主题,所以我有2个非常不同的颜色和它看起来并不好.
我意识到在5.0你可以使用,Window.setStatusBarColor()但ActionBarActivity没有这个.
所以我的问题是在5.0中如何更改状态栏颜色ActionBarActivity?
mat*_*ash 395
我不确定我是否理解这个问题.
我想以编程方式更改状态栏颜色(并提供设备具有Android 5.0)然后您可以使用Window.setStatusBarColor().不论活动是源自Activity还是来自,都不应该有所区别ActionBarActivity.
试试做:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.BLUE);
}
Run Code Online (Sandbox Code Playgroud)
刚试过这个,ActionBarActivity它可以正常工作.
注意:FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS如果values-v21样式文件已经设置,则无需以编程方式设置标志,方法是:
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
Run Code Online (Sandbox Code Playgroud)
Ari*_*Roy 55
有多种方法可以更改状态栏颜色.
1)使用styles.xml.您可以使用android:statusBarColor属性以简单但静态的方式执行此操作.
注意:您还可以将此属性与材质主题一起使用.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="AppTheme.Base">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
2)您可以使用Window类中的setStatusBarColor(int)方法动态完成它.但请记住,此方法仅适用于API 21或更高版本.所以一定要检查一下,否则你的应用肯定会在较低的设备中崩溃.
这是此方法的一个工作示例.
if (Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}
Run Code Online (Sandbox Code Playgroud)
其中primaryDark是我在我的应用程序中使用的700色原色.您可以在colors.xml文件中定义此颜色.
如果您有任何问题,请试一试并告诉我.希望能帮助到你.
我认为状态栏颜色尚未在AppCompat中实现.这些是可用的属性:
<!-- ============= -->
<!-- Color palette -->
<!-- ============= -->
<!-- The primary branding color for the app. By default, this is the color applied to the
action bar background. -->
<attr name="colorPrimary" format="color" />
<!-- 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" />
<!-- Bright complement to the primary branding color. By default, this is the color applied
to framework controls (via colorControlActivated). -->
<attr name="colorAccent" format="color" />
<!-- The color applied to framework controls in their normal state. -->
<attr name="colorControlNormal" format="color" />
<!-- The color applied to framework controls in their activated (ex. checked) state. -->
<attr name="colorControlActivated" format="color" />
<!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
<attr name="colorControlHighlight" format="color" />
<!-- The color applied to framework buttons in their normal state. -->
<attr name="colorButtonNormal" format="color" />
<!-- The color applied to framework switch thumbs in their normal state. -->
<attr name="colorSwitchThumbNormal" format="color" />
Run Code Online (Sandbox Code Playgroud)
(来自\ sdk\extras\android\support\v7\appcompat\res\values\attrs.xml)
只需将此函数粘贴到您保存所有其他常用函数的 Utils 类中即可。
fun Activity.changeStatusBarColor(color: Int, isLight: Boolean) {
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = color
WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = isLight
}
Run Code Online (Sandbox Code Playgroud)
并从任何地方使用它,如下所示:
changeStatusBarColor(
ContextCompat.getColor(
context,
R.color.black
), false
)
Run Code Online (Sandbox Code Playgroud)
请注意,这里我还分别管理了深色和浅色状态栏颜色,以管理状态栏的图标和文本颜色。
| 归档时间: |
|
| 查看次数: |
130835 次 |
| 最近记录: |