android setactionbar怎么设置actionbar背景色

你的位置: >
> Android 实现变色状态栏
首先我们得了解什么是透明状态栏以及什么是沉浸式状态栏,以及其区别,国内习惯称透明状态栏为沉浸式状态栏,但是两者是有本质区别的。
先来看看什么是沉浸式模式。
Android 4.4中,沉浸式体验得到了再次强化,提供了一种“全屏模式”(Full-screen Immersive Mode)。全屏模式又分两种,一种叫后撤式 (Lean Back),另一种叫做沉浸式(Immersive)。后撤式已经在之前的系统中被广泛使用了——当你在优酷APP中观看视频时,大部分时间手指是不会去碰屏幕的。这种情况下,虚拟键和状态栏都会自动隐藏,但当你触摸屏幕的时候,它们又会出现。而新加入的沉浸式则不太一样,在沉浸式全屏状态下,对屏幕的操作并不会唤出系统栏。想要唤出系统栏,你必须从屏幕的上/下边缘向屏幕内划入。沉浸式的全屏状态更适合游戏和阅读这样的应用。
但沉浸模式和普通全屏不同点在于,沉浸模式通过下滑屏幕上方或者下方可以调出虚拟键和状态栏。
比如多看阅读,下图是在阅读时沉浸模式下全屏。
然后从屏幕上方下滑或者下方上划,虚拟键和状态栏出现了。但却是直接覆盖在程序文字上的。
而沉浸式状态栏的来源就是很多手机用的是实体按键,没有虚拟键,于是开了沉浸模式就只有状态栏消失了。于是沉浸模式成了沉浸式状态栏。
Android 4.4 一个很重要的改变就是透明系统栏.。新的系统栏是渐变透明的, 可以最大限度的允许屏幕显示更多内容, 也可以让系统栏和 Action Bar 融为一体, 仅仅留下最低限度的背景保护以免通知通知栏内容和 Action Bar 文字/图标难以识别。谷歌把这种效果称之为:Translucent Bar。
Translucent Bar 是 Android 对 Edge to Edge 尝试中的一个, 也是最容易被用户注意到的. 它的初始目的就是要最大化可视面积和淡化系统界面的存在感。
其实简单一点就是布局延伸到状态栏,状态栏背景与应用背景相同,这就是*透明状态栏*。最直接的例子就是UC浏览器的天气界面,其布局延伸到状态栏,但是状态栏与应用同背景,如图所示
但是这样有时候会把状态栏颜色变得和应用的背景颜色一样,但是实际上只是修改了状态栏的颜色,我们称它为变色状态栏
而现在大家所在用的QQ等软件,状态栏与软件颜色融为一体,其实就是变色状态栏。而小米MIUI的自带应用,也都是变色状态栏或者是透明状态栏,而并非是沉浸式状态栏。
这里我们姑且称变色状态栏为透明状态栏的一种,本篇文章就是带大家实现这种透明状态栏。
由于这种效果只有在4.4及以上有效,所以本篇文章的效果只有在4.4及以上有效。
首先应用主题
&resources&
&style name=&AppTheme& parent=&@style/BaseTheme&&
&style name=&BaseTheme& parent=&Theme.AppCompat.Light.NoActionBar&&
&item name=&colorPrimary&&@color/colorPrimary&/item&
&item name=&colorPrimaryDark&&@color/colorPrimaryDark&/item&
&/resources&
然后我们在res下新建一个values-v19的目录,代表最低API为19,新建一个style.xml,下面的代码是透明状态栏的关键
&resources&
&style name=&AppTheme& parent=&@style/BaseTheme&&
&item name=&android:windowTranslucentNavigation&&true&/item&
&item name=&android:windowTranslucentStatus&&true&/item&
&/resources&
我们禁用了系统的ActionBar,使用ToolBar代替,布局代码如下
&LinearLayout
xmlns:android=&/apk/res/android&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:orientation=&vertical&&
&android.support.v7.widget.Toolbar
android:id=&@+id/toolbar&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:background=&?attr/colorPrimary&
android:fitsSystemWindows=&true&
&/android.support.v7.widget.Toolbar&
&/LinearLayout&
细心的你会发现在Toolbar中加入了android:fitsSystemWindows=”true”属性,这就是将布局延伸到状态栏,这时候你运行一下,会发现Toolbar上移到了状态栏的位置。上移的高度刚好是状态栏的高度。
但是我们并不想它移动到上面,只是想它状态栏和Toolbar颜色一样,要怎么做的,很简单,在代码中通过setSupportActionBar设置到ActionBar的位置即可。
Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
之后的效果就是这样的。
很明显的看到,ToolBar就是之前的高度,但是状态栏也变色了。
但是我们又怎么能满足于此呢。在Android 5.0上,我们的状态栏的颜色是要比Toolbar的颜色要深的。就像这样。
我们还要进一步修饰,需要对状态栏着色,这里需要用到一个开源库
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
之后再设置布局后加入以下代码
SystemBarTintManager tintManager=new SystemBarTintManager(this);
tintManager.setStatusBarTintResource(R.color.colorPrimaryDark);
tintManager.setStatusBarTintEnabled(true);
最终效果就是上图所示
当然这个库里还有很多函数,具体功能自己去琢磨吧,并且其内部源码也并不复杂,建议还是看下其源码实现。
转载请注明: &
与本文相关的文章Android UI开发详解之ActionBar
第8页_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Android UI开发详解之ActionBar
来源:Linux社区&
作者:eclipse_xu
fragment:
public class Ftest extends Fragment{&
// Fragment对应的标签,当Fragment依附于Activity时得到& &
private S& & @Override&
public void onAttach(Activity activity)& & {& & & & & super.onAttach(activity);& & & & & &
tag = getTag();&
}& & @Override& & public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)& & {& & & & //& View view = (View) inflater.inflate(R.layout.ftest, container, false);& & &
//& TextView textView=(TextView) view.findViewById(R.id.topView);//& textView.setText(tag);& TextView textView = new TextView(getActivity());& & &
& textView.setText(tag);& return textV& & & }}
效果图如下:
十、ActionBar的美化
&style name="MyActionBar" parent="@:style/Widget.Holo.ActionBar"&&item name="android:windowActionBarOverlay"&true&/item&&item name="android:background"&@color/ab_background_color&/item&&item name="android:backgroundStacked"&@color/ab_backgroundStacked_color&/item&&item name="android:backgroundSplit"&@color/ab_backgroundSplit_color&/item&&/style&
item name="android:background:ActionBar本身的背景颜色。item name="android:backgroundStacked":ActionBar被分离时Tab 的背景颜色。item name="android:backgroundSplit":ActionBar Item 在分割到底部时的背景颜色。item name="android:background:蓝色 item name="android:backgroundStacked":紫色 item name="android:backgroundSplit":绿色
2、其他选项的Style
Action items
android:actionButtonStyle
&style name="Widget.Holo.ActionButton" parent="Widget.ActionButton"& &item name="android:minWidth"&56dip&/item& &item name="android:gravity"&center&/item& &item name="android:paddingLeft"&12dip&/item& &item name="android:paddingRight"&12dip&/item& &item name="android:scaleType"&center&/item& &/style&
从上面的定义看出,它定义了Button的最小宽度、居中样式、左右padding以及图片的放缩方式。再看看该样式的父样式
&style name="Widget.ActionButton"& &item name="android:background"&?android:attr/actionBarItemBackground&/item& &item name="android:paddingLeft"&12dip&/item& &item name="android:paddingRight"&12dip&/item& &item name="android:minWidth"&56dip&/item& &item name="android:minHeight"&?android:attr/actionBarSize&/item& &/style&
android:actionBarItemBackground
定义显示的item选项的背景 Api 14以上可以使用android:itemBackground定义全部Item的背景选项这俩个选项其实和定义actionBarButtonStyle的背景已经有覆盖 所以用的时候定义一个就行
android:actionBarDivider
样式属性actionBarDivider定义了ActionBar操作项之间的分隔条。可以看出,它直接引用了另一个ActionBar相关属性 dividerVertical,其定义如下:
&item name="dividerVertical"&@drawable/divider_vertical_dark&/item&&
android:actionMenuTextColorandroid:actionMenuTextAppearance这俩个属性是定义menu item 文字大小和颜色
&style name="myactionMenuTextAppearance" parent="@android:style/TextAppearance.Holo.Large"&&item name="android:textSize"&20sp&/item&&item name="android:textStyle"&bold&/item&&item name="android:textAllCaps"&true&/item&&/style&&item name="android:actionMenuTextAppearance"&@style/myactionMenuTextAppearance&/item&&item name="android:actionMenuTextColor"&@color/ab_backgroundStacked_color&/item&
android:actionBarWidgetTheme Navigation tabsandroid:actionBarTabStyle样式属性 actionBarTabStyle 为Tab页的标签定义样式
&style name="Widget.Holo.ActionBar.TabView" parent="Widget.ActionBar.TabView"& &item name="android:background"&@drawable/tab_indicator_holo&/item& &item name="android:paddingLeft"&16dip&/item& &item name="android:paddingRight"&16dip&/item& &/style&
android:actionBarTabBarStyle样式属性actionBarTabBarStyle 定义了Tab标签之间分隔条。
&style name="Widget.Holo.ActionBar.TabBar" parent="Widget.ActionBar.TabBar"& &item name="android:divider"&?android:attr/actionBarDivider&/item& &item name="android:showDividers"&middle&/item& &item name="android:dividerPadding"&12dip&/item& &/style&
android:actionBarTabTextStyle&样式属性 actionBarTabTextStyle 定义了Tab的文本样式,如下:
&style name="Widget.Holo.ActionBar.TabText" parent="Widget.ActionBar.TabText"& &item name="android:textAppearance"&@style/TextAppearance.Holo.Medium&/item& &item name="android:textColor"&?android:attr/textColorPrimary&/item& &item name="android:textSize"&12sp&/item& &item name="android:textStyle"&bold&/item& &item name="android:textAllCaps"&true&/item& &item name="android:ellipsize"&marquee&/item& &item name="android:maxLines"&2&/item& &/style&
android:actionDropDownStyle&样式属性 actionDropDownStyle 定义了下拉导航列表的样式,如下:
&style name="Widget.Holo.Spinner.DropDown.ActionBar"& &item name="android:background"&@android:drawable/spinner_ab_holo_dark&/item& &/style&
&style name="Widget.Holo.Spinner" parent="Widget.Spinner.DropDown"& &item name="android:background"&@android:drawable/spinner_background_holo_dark&/item& &item name="android:dropDownSelector"&@android:drawable/list_selector_holo_dark&/item& &item name="android:popupBackground"&@android:drawable/menu_dropdown_panel_holo_dark&/item& &item name="android:dropDownVerticalOffset"&0dip&/item& &item name="android:dropDownHorizontalOffset"&0dip&/item& &item name="android:dropDownWidth"&wrap_content&/item& &item name="android:popupPromptView"&@android:layout/simple_dropdown_hint&/item& &item name="android:gravity"&left|center_vertical&/item& &/style&
说下ActionBar 总体系统提供的样式&样式属性actionBarStyle定义了ActionBar的基本样式。
&style name="Widget.Holo.ActionBar" parent="Widget.ActionBar"& &item name="android:titleTextStyle"&@android:style/TextAppearance.Holo.Widget.ActionBar.Title&/item& &item name="android:subtitleTextStyle"&@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle&/item& &item name="android:background"&@android:drawable/ab_transparent_dark_holo&/item& &item name="android:backgroundStacked"&@android:drawable/ab_stacked_transparent_dark_holo&/item& &item name="android:backgroundSplit"&@android:drawable/ab_bottom_transparent_dark_holo&/item& &item name="android:divider"&?android:attr/dividerVertical&/item& &item name="android:progressBarStyle"&@android:style/Widget.Holo.ProgressBar.Horizontal&/item& &item name="android:indeterminateProgressStyle"&@android:style/Widget.Holo.ProgressBar&/item& &item name="android:progressBarPadding"&32dip&/item& &item name="android:itemPadding"&8dip&/item& &/style&
&style name="Widget.ActionBar"& &item name="android:background"&@android:drawable/action_bar_background&/item& &item name="android:displayOptions"&useLogo|showHome|showTitle&/item& &item name="android:divider"&@android:drawable/action_bar_divider&/item& &item name="android:height"&?android:attr/actionBarSize&/item& &item name="android:paddingLeft"&0dip&/item& &item name="android:paddingTop"&0dip&/item& &item name="android:paddingRight"&0dip&/item& &item name="android:paddingBottom"&0dip&/item& &item name="android:titleTextStyle"&@android:style/TextAppearance.Widget.ActionBar.Title&/item& &item name="android:subtitleTextStyle"&@android:style/TextAppearance.Widget.ActionBar.Subtitle&/item& &item name="android:progressBarStyle"&@android:style/Widget.ProgressBar.Horizontal&/item& &item name="android:indeterminateProgressStyle"&@android:style/Widget.ProgressBar.Small&/item& &item name="android:homeLayout"&@android:layout/action_bar_home&/item& &/style&
更多Android相关信息见 专题页面 8
相关资讯 & & &
& (01月11日)
& (09/18/:07)
& (03/11/:33)
& (08/09/:57)
& (08/04/:17)
& (04/16/:38)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。&nbsp&#8250&nbsp&nbsp&#8250&nbsp
如何让android的actionbar浮动且透明
如上图所示,谷歌地图的actionbar是透明的,且浮动在整个布局之上,没有占用布局空间。其实要做到这样的效果,我们首先想到的是两个方面:1.将让actionbar浮动起来。2.给actionbar一个背景,可以为颜色也可以为图片。下面我以背景色为颜色举个例子。getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));google的actionbar是分为上下两栏显示的,上面的代码只能设置顶部actionbar的背景色,为了让下面的背景色一致,还需要添加一行代码:actionBar.setSplitBackgroundDrawable(newColorDrawable(Color.parseColor("#330000ff")));如果我们不想在代码中设置actionbar背景,而是在style中修改xml,可以自定义actionbar,然后设置下面三个属性:&style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar"&
&item name="android:background"&@drawable/ab_stacked_solid_inverse_holo&/item&
&item name="android:backgroundStacked"&#346c36&/item&
&item name="android:backgroundSplit"&@drawable/ab_stacked_solid_inverse_holo&/item&
&/style&其中的background和setBackgroundDrawable对应,backgroundSplit和setSplitBackgroundDrawable对应,而backgroundStacked代表的是actionbar选项卡的背景色。但是actionbar的背景如果设置为纯色,或者为不透明的图片,那么上面的方法无法使actionbar达到透明的效果。注意上面的代码中,我们的颜色值并不是纯色的而是有一定的透明度。#330000ff的前两位代表透明度。
上一篇: 本文介绍android中如何编写一个进行联网操作的简单应用,了我们应该遵循的其中的基本步骤,这是谷歌工程司提倡的最佳实践。 联网操作需要在应用的manifest 文件中添加如下权限: uses-permission android:name="android.permission.INTERNET" /uses-permissi
下一篇: 在介绍如何在Android平台下进行文件的读取之前,有必要了解Android平台下的数据存储规则。在其他的操作系统如Windows 平台下,应用程序可以自由地或者在特定的访问权限基础上访问或修改其他应用程序名下的文件等资源,而在Android平台下,一个应用程序中所有

我要回帖

更多关于 android中actionbar 的文章

 

随机推荐