我'm developing an simple app to test the material design. I'使用 com.android.support:appcompat-v7:21.0.0
我的活动如下:
public class MyActivity extends ActionBarActivity {
...
}
布局定义为:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MyActivity">
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="128dp"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimaryDark"/>
</LinearLayout>
现在我按照材料指南定义了我的主题:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary500</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark700</item>
</style>
我想在Android 5之前更改状态栏颜色并将其设置为 colorPrimaryDark
但我找不到方法 . 我试过用:
getWindow().setStatusBarColor(..)
但是从第21级可以获得setStatusBar颜色 . 为什么我在我的主题中定义 colorPrimaryDark
并使用appcompact状态栏不会改变颜色?有人可以帮忙吗?
9 回答
切换到AppCompatActivity并在工具栏上添加25 dp paddingTop并打开
然后,将工具栏放在顶部
此解决方案设置Lollipop,Kitkat和一些前Lollipop设备(三星和索尼)的状态栏颜色 . SystemBarTintManager正在管理Kitkat设备;)
状态栏是操作系统拥有的系统窗口 . 在5.0之前的Android设备上,应用程序无权更改其颜色,因此这不是AppCompat库可以支持旧平台版本的内容 . AppCompat可以做的最好的事情就是为应用程序中的
ActionBar
和其他常见UI小部件着色提供支持 .虽然不支持着色状态栏<5.0,但在4.4中你可以使用一种解决方法来获得更暗的颜色:
使状态栏保持半透明状态
然后使用AppCompat的工具栏为您的appbar,确保它适合系统窗口:
确保将工具栏设置为活动的工具栏:
工具栏延伸到状态栏下方,状态栏的半透明度使其看起来是较暗的二级颜色 . 如果这不是您想要的颜色,这个组合允许您在状态栏下方放置一个视图,该视图具有您选择的背景颜色(尽管状态栏仍然显得较暗) .
由于4.4只有一种边缘情况解决方法,但是你去了 .
将此代码放在Activity的
onCreate
方法中 . 这对我有帮助 .正如其他人也提到过的,可以通过将以下内容添加到Activity的onCreate()来轻松解决:
但是,我想在这里添加的重点是,在某些情况下,即使上面也不会改变状态栏颜色 . 例如,当使用MikePenz库导航抽屉时,它会明确地覆盖状态栏颜色,因此您需要手动添加以下内容才能使其工作:
.withStatusBarColorRes(R.color.status_bar_color)
AppCompat v7:21.0.0不支持状态栏着色 .
来自Android developers blog post
这意味着AppCompat lib将仅对Lollipop及更高版本上的状态栏进行着色 .
使Theme.AppCompat样式为parent
并将
getSupportActionBar().getThemedContext()
放在onCreate()
中 .我知道这不回答这个问题,但是使用Material Design(API 21),我们可以通过在
styles.xml
中的主题声明中添加这一行来更改状态栏的颜色:注意
android:statusBarColor
,我们可以在其中定义颜色,否则使用默认值 .