Fra*_*ola 54 android statusbar material-design
我正在开发一个简单的应用来测试材料设计.我正在使用com.android.support:appcompat-v7:21.0.0,我的活动看起来像:
public class MyActivity extends ActionBarActivity {
...
}
Run Code Online (Sandbox Code Playgroud)
布局定义为:
<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>
Run Code Online (Sandbox Code Playgroud)
现在我按照材料指南定义了我的主题:
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary500</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark700</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我想在Android 5之前更改状态栏颜色并将其设置为colorPrimaryDark但我无法找到方法.我试过用:
getWindow().setStatusBarColor(..)
Run Code Online (Sandbox Code Playgroud)
但是,从第21级开始可以使用setStatusBar颜色.为什么如果我colorPrimaryDark在我的主题中定义并使用appcompact,状态栏不会改变颜色?有人可以帮忙吗?
Ale*_*ood 62
状态栏是操作系统拥有的系统窗口.在5.0之前的Android设备上,应用程序无权更改其颜色,因此这不是AppCompat库可以支持旧平台版本的内容.AppCompat可以做的最好的事情就是为ActionBar应用程序中的常用UI小部件着色提供支持.
Tom*_*Tom 62
虽然不支持着色状态栏<5.0,但在4.4中你可以使用一种解决方法来获得更暗的颜色:
使状态栏保持半透明状态
<item name="android:windowTranslucentStatus">true</item>
Run Code Online (Sandbox Code Playgroud)
然后使用AppCompat的工具栏为您的appbar,确保它适合系统窗口:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
...
android:fitsSystemWindows="true"/>
Run Code Online (Sandbox Code Playgroud)
确保将工具栏设置为活动的工具栏:
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)
工具栏延伸到状态栏下方,状态栏的半透明度使其看起来是较暗的二级颜色.如果这不是您想要的颜色,这个组合允许您在状态栏下方放置一个视图,该视图具有您选择的背景颜色(尽管状态栏仍然显得较暗).
由于4.4只有一种边缘情况解决方法,但是你去了.
use*_*953 39
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(getResources().getColor(R.color.actionbar));
}
Run Code Online (Sandbox Code Playgroud)
将此代码放在Activity的onCreate方法中.这对我有帮助.
小智 13
正如其他人也提到过的,可以通过将以下内容添加到Activity的onCreate()来轻松解决:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.primary_dark));
}
Run Code Online (Sandbox Code Playgroud)
但是,我想在这里添加的重点是,在某些情况下,即使上面也不会改变状态栏颜色.例如,当使用MikePenz库导航抽屉时,它会明确地覆盖状态栏颜色,因此您需要手动添加以下内容才能使其工作:
.withStatusBarColorRes(R.color.status_bar_color)
Anu*_*kur 10
AppCompat v7:21.0.0不支持状态栏着色.
在较旧的平台上,AppCompat尽可能模拟颜色主题.目前,这仅限于为操作栏和一些小部件着色.
这意味着AppCompat lib将仅对Lollipop及更高版本上的状态栏进行着色.
切换到AppCompatActivity并在工具栏上添加25 dp paddingTop并打开
<item name="android:windowTranslucentStatus">true</item>
Run Code Online (Sandbox Code Playgroud)
然后,将工具栏放在顶部
| 归档时间: |
|
| 查看次数: |
94743 次 |
| 最近记录: |