如何设置android 5.0主题,android5.0状态栏透明,toolbar颜色设定

18:03 提问
Android状态栏的颜色改变
Android状态栏的颜色改变,希望在Android5.0以下也可实现对状态栏颜色的设置,我查资料用
Toolbar可对Android5.0的状态栏进行变色,但5.0以下没有效果,求大神科普啊
按赞数排序
你说的就是沉浸式状态栏或者变色龙功能,可参考以下教程
【教程】实现安卓状态栏的沉浸式状态栏
其他相关推荐
其他相似问题分别用ToolBar和自定义导航栏实现沉浸式状态栏
作者:熊,我-
字体:[ ] 类型:转载 时间:
本文主要介绍了分别用ToolBar和自定义导航栏实现沉浸式状态栏的方法步骤,具有一定的参考价值,下面跟着小编一起来看下吧
一、ToolBar
1、在build.gradle中添加依赖,例如:
compile 'com.android.support:appcompat-v7:23.4.0'
2、去掉应用的ActionBar。可以是修改主题theme为“NoActionBar”,例如:
&style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"&
或者不修改主题为"NoActionBar",而在主题的style下,添加:
&item name="windowNoTitle"&true&/item&
&item name="windowActionBar"&false&/item&
第二个属性代表是否用ActionBar代替TitleBar。
其实,刚学的时候,感觉很纳闷,怎么又多了个TitleBar?后来查了很久才发现,3.0以前,状态栏下面的是标题栏(只能显示标题等少量信息),3.0以后就变成了应用栏,也就是ActionBar。
另外,我测试的时候,activity是继承于AppCompatActivity,主题是AppCompat类型的。这种情况下,必须要像上面那样写才有效果,少写或值不同的话,要么没效果,要么报错。
最后,上面两个属性的说明可在android.R.attr这个类中查看。
3、在xml中为ToolBar添加属性
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
fitsSystemWindows是ToolBar实现沉浸式状态栏的关键,其大概情况是,如果设为true,就会调整这个view去留一些空间给系统窗口,如果不设置或设为false,ToolBar就会和状态栏重叠在一起。
而第二个属性中,它的值全写是"?android:attr/actionBarSize",其意思是引用当前主题中的actionBarSize这个属性。更多相关说明可查看官方文档中Accessing Resources的部分。
上面两个属性可在android.view.View这个类中查看。
4、在java中添加判断sdk版本的代码并在用户的系统是4.4及以上时设置状态栏为透明
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
无论是ToolBar,还是自定义导航栏,这个操作都是实现沉浸式状态栏的关键。
因为设置状态栏为透明的这个属性,要4.4以上才能使用,所以4.4以下的系统是不能够实现沉浸式状态栏的。而在4.4到5.0的系统中,状态栏是全透明的,也就是它的颜色会跟你的ToolBar和自定义导航栏的颜色一样。而在5.0以上的系统中,则是半透明的,也就看起来会比较深暗。
而我在6.0的系统上测试时,发现这一步没设置和设置了的,从效果上看,区别就是没设置时状态栏颜色浅一点,而且ToolBar的padding top为0,而设置了的颜色就深一点,padding top为状态栏的高度。具体有什么影响,还不清楚。但这会让自定义导航的外观变形,它会增加状态栏的高度,但又没有让这部分与状态栏重叠,就导致效果变形。
5、最后在java中添加
setSupportActionBar(mToolbar);
ToolBar的布局代码:
&?xml version="1.0" encoding="utf-8"?&
&android.support.v7.widget.Toolbar
xmlns:android="/apk/res/android"
xmlns:app="/apk/res-auto"
android:id="@+id/tool_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
android:elevation="4dp"
android:fitsSystemWindows="true"
android:minHeight="?android:attr/actionBarSize"
app:title="ToolBar"
app:subtitle="toolbar"/&
&效果图(Android 6.0):
二、自定义导航栏TopBar
1、设置窗口为无标题,上面第2步中的两个方法都可以实现,或者是在java中添加如下代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
注意在添加这句代码时,确保是在加载布局内容之前,也就是onCreate的setContentView之前。在《Android群英传》“Android控件架构”,这一节中解释了为什么requestWindowFeature()需要在setContentView()之前。
另外,我发现如果该activity是继承AppCompatActivity的话,只写上面的这句代码是没有变化的,显示的还是ActionBar。但如果是继承FragmentActivity的话,就有效果,也就说上面第2步中的第二个方法,只添加其中任意一个属性都是可以的。至于是什么原因,我还没弄清楚。
2、同上面第4步,判断系统版本并按需设置状态栏为透明
3、获取状态栏的高度
protected int getStatusHeight() {
Class&?& c = Class.forName("com.android.internal.R$dimen"); // 获得与字符串对应的Class对象
Object object = c.newInstance(); // 创建这个Class的实例对象
Field field = c.getField("status_bar_height"); // 拿到字符串对应的变量
int x = Integer.parseInt(field.get(object).toString()); // 通过这个实例对象拿到这个变量的值,再转换类型,最后转为整型,变为一个资源id
return getResources().getDimensionPixelSize(x);
} catch (Exception e) {
e.printStackTrace();
这部分代码是利用Java的反射机制来实现的,因为这个internal包默认会被sdk/platforms/android-version中的android.jar给移除掉,所以无法直接调用或查看这个包中的类。如果要使用的话,可以借助这个开源项目。
4、获取自定义TopBar的高度并修改布局参数
protected void setStatusBar() {
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
final ViewGroup viewGroup = (ViewGroup) findViewById(R.id.top_bar);
final int statusHeight = getStatusHeight();
viewGroup.post(new Runnable() {
public void run() {
int topBarHeight = viewGroup.getHeight();
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) viewGroup.getLayoutParams();
layoutParams.height = statusHeight + topBarH
viewGroup.setLayoutParams(layoutParams);
因为在include这个TopBar的布局文件中,其父布局是LinearLayout,而TopBar的父布局是RelativeLayout,所以这里先要转成ViewGroup,等getLayoutParams时,再转成LinearLayout.LayoutParams。
TopBar的布局:
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="/apk/res/android"
android:id="@+id/top_bar"
android:layout_width="match_parent"
android:layout_height="49dp"
android:background="@color/colorPrimary"
android:gravity="bottom"&
&RelativeLayout
android:layout_width="match_parent"
android:layout_height="49dp"&
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="@string/app_name"
android:textSize="24sp"
android:textColor="#ffffff"/&
&/RelativeLayout&
&/RelativeLayout&
因为这个布局的高度会在代码中动态地修改,即49dp加上状态栏的高度,所以只有一个层级的结构的话,那导航栏的内容就会往上偏。所以要嵌套多一层来维持导航栏的高度,同时在最外层的布局中,添加android:gravity="bottom"这个属性来保证导航栏不往上偏。
效果图(Android 6.0):
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具android 5.0之后toolbar阴影怎么去除
android开发中的问题
sdk版本使用5.0
使用support library中的toolbar,如何不显示阴影???
根据网上查找的资料:
/questions//remove-shadow-below-actionbar/46593,
分别对pre 5.0 和5.0 之后的设置作了说明,但总是不成功,谁有比较有效的方法呢?
下附上我的styles文件如下
&resources&
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
&style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"&
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
&!-- Remove shadow below action bar Android & 5.0 --&
&item name="android:windowContentOverlay"&@null&/item&
&!-- Support library compatibility --&
&item name="elevation"&0dp&/item&
&!-- Application theme. --&
&style name="AppTheme" parent="AppBaseTheme"&
&!-- All customizations that are NOT specific to a particular API-level can go here. --&
&!-- Customize your theme here. --&
&item name="colorPrimary"&@color/theme_primary&/item&
&item name="colorPrimaryDark"&@color/theme_primary_dark&/item&
&item name="colorAccent"&@color/colorAccent&/item&
&style name="AppBaseTheme1" parent="AppTheme"&
&item name="android:windowIsTranslucent"&true&/item&
&!-- Remove shadow below action bar Android & 5.0 --&
&item name="android:windowContentOverlay"&@null&/item&
&!-- Support library compatibility --&
&item name="elevation"&0dp&/item&
&style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" /&
&style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" /&
&/resources&
好像记得当初是重新自定义了TOOLBAR的LAYOUT。
--- 共有 1 条评论 ---
阴影是toolbar自带的吗
此处正解,我的使用方法不当而已
问题已解决
/p/802545cec682Android5.x新特性之 Toolbar和Theme的使用
5.0以后谷歌大力推崇Material Design设计,有意统一之前Android style风格乱象的情况。上一篇博客我们学习了Android5.x 新控件之RecyclerView,CardView,Palette的使用。这篇文章来介绍Android5.x新特性之 Toolbar和Theme的使用.
注意 在使用Android5.x中的Toolbar和Theme需要在你的工程的build.gradle文件下引入如下配置
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
你还在为Android 的ActionBar的文字不能随意设置位置而烦恼么?你还在为ActionBar不能自定义添加自己的布局而烦恼么?现在告诉你一个好消息,当你看到这篇文章时,就不必烦恼了。Google在Android5.0以后推出了一个Toolbar来完全代替之前的Actionbar,Toolbar的出现解决了Actionbar的各种限制,Toolbar可以完全自定义和配置。我们从以下几个点了解Toolbar的使用
Toolbar的基础使用 Toolbar配置主题Theme Toolbar中常用的控件设置 Toolbar的自定义
Toolbar的基础使用
我们从以下几点来一步一步的学习Toolbar的使用
Style(风格) Layout(布局) Activity(代码)
为了能在你的Activity中使用Toolbar,你必须在工程里修改styles.xml文件里的主题风格,默认如下
各个属性就不解释了,注释都很清楚。我们来看看Toolbar怎么使用这些主题吧?
配置activity_main.xml中的Toolbar改成为如下:
相比上面的Toolbar配置,这里只多添加了 这么一行代码
android:background=?attr/colorPrimary
给Toolbar设置背景属性,这里使用了styles.xml文件中如下属性
@color/accent_material_dark
经过如下配置再来看看效果图吧!
效果有点改进,我们继续发现Toolbar的优势吧!
Toolbar中常用的控件设置
那么Toolbar是否都有Actionbar的所有功能呢?毋庸置疑,来看代码:
toolbar = findView(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
toolbar.setTitle(主标题);
toolbar.setSubtitle(副标题);
toolbar.setLogo(R.drawable.ic_launcher);
toolbar.setNavigationIcon(android.R.drawable.ic_input_delete);
Toolbar可以设置 Title(主标题),Subtitle(副标题),Logo(logo图标)NavigationIcon(导航按钮)。
注意 如果你想要通过toolbar.setTitle(&主标题&);设置Toolbar的标题,你必须在调用它之前调用如下代码:
getSupportActionBar().setDisplayShowTitleEnabled(false);
上面代码用来隐藏系统默认的Title。
那么Toolbar能不能使用Menu菜单功能呢?答案是肯定的了。来看看加载如下menu菜单的Toolbar吧
怎么给menu的各个Item添加点击事件呢?Toolbar给我们提供如下方法
Activity继承Toolbar的OnMenuItemClickListener接口
public class MainActivity extends AppCompatActivity implements Toolbar.OnMenuItemClickListener
//实现接口
toolbar.setOnMenuItemClickListener(this);
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_edit:
Toast.makeText(this, 查找按钮, Toast.LENGTH_SHORT).show();
case R.id.action_share:
Toast.makeText(this, 分享按钮, Toast.LENGTH_SHORT).show();
至此,Toolbar添加控件就基本完结了,来看看效果如下
是不是很炫?我们还没有使用自定义的Toolbar呢?那怎么使用呢?
Toolbar的自定义
其实Toolbar是继承ViewGroup的一个容器控件,言外之意就是我们可以在Toolbar添加自己的布局了。看代码
这样我们就可以任意给Toolbar布局了。也解决了标题不能居中的问题。有特殊需求的Toolbar的童鞋就可以自行补脑实现各种需求效果啦!
Android5.x Material Design 主题风格Theme配置
在通往Material Design风格的路上总是遥远的,但也阻挡不了我们学习的劲头,仅仅会使用Toolbar是不够的。除了Toolbar的风格,我们还可以通过设置Theme主题该控制Android很多控件的风格。直接上一张图片效果。
以上效果的主题配置如下:
1.colorPrimary: Toolbar导航栏的底色。
2.colorPrimaryDark:状态栏的底色,注意这里只支持Android5.0以上的手机。
3.textColorPrimary:整个当前Activity的字体的默认颜色。
4.android:windowBackground:当前Activity的窗体颜色。
5.colorAccent:CheckBox,RadioButton,SwitchCompat等控件的点击选中颜色
6.colorControlNormal:CheckBox,RadioButton,SwitchCompat等默认状态的颜色。
7.colorButtonNormal:默认状态下Button按钮的颜色。
8.editTextColor:默认EditView输入框字体的颜色。

我要回帖

更多关于 toolbar沉浸式状态栏 的文章

 

随机推荐