Android 关于状态栏开发的几件事,教育移动互联网应用程序app

//条件状态栏透明,要不然不会起作用

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

if (mStatusBarView == null) {

mStatusBarView = new View(FragmentStatusAndActionBarActivity.this);

int screenWidth = getResources().getDisplayMetrics().widthPixels;

int statusBarHeight = getStatusBarHeight();

ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(screenWidth, statusBarHeight);

mStatusBarView.setLayoutParams(params);

mStatusBarView.requestLayout();

//获取根布局

ViewGroup systemContent = findViewById(android.R.id.content);

ViewGroup userContent = (ViewGroup) systemContent.getChildAt(0);

userContent.setFitsSystemWindows(false);

userContent.addView(mStatusBarView, 0);

}

}

上面是对应Activity中的布局,意思就是不使用系统提供的ActionBar,使用ToolBar来代替(网上一大推代替的方法),下面的代码中设置,状态栏透明,并且设置了sitFitSystemWindow(false),通过这些操作,我们相当于把系统的StatusBar,ActionBar,都干掉了,那么接下来,我们就可以模拟创建出StatusBaruserContent.addView(mStatusBarView, 0);那么现在我们就可以自己控制statusBar和ActionBar,显示什么颜色?消失还是隐藏?

ToolBar显示的Fragment:

@Override

public void onHiddenChanged(boolean hidden) {

super.onHiddenChanged(hidden);

mActivity.mToolbar.setVisibility(View.VISIBLE);//设置ToolBar显示

//设置statusBar的颜色

mActivity.mStatusBarView.setBackgroundColor(getResources().getColor(android.R.color.holo_blue_bright));

}

ToolBar隐藏的Fragment

@Override

public void onHiddenChanged(boolean hidden) {

super.onHiddenChanged(hidden);

mActivity.mToolbar.setVisibility(View.GONE);//设置ToolBar消失

//设置statusBar的颜色

mActivity.mStatusBarView.setBackgroundColor(getResources().getColor(android.R.color.holo_orange_light));

}

5

需求五、设置状态栏文字的颜色

这里写图片描述

//设置白底黑字

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

getWindow().getDecorView()

.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

}

但是需要注意的是:目前只有android原生6.0以上支持修改状态栏字体。

除此国内厂商小米、魅族也开放了修改状态栏字体的方式:

小米 MIUI6

https://dev.mi.com/doc/p=4769/index.html

魅族 Flyme

http://open-wiki.flyme.cn/index.php?title=状态栏变色

6

需求六

需求六、切换fragment时,toolBar和statusbar显示与否、statusBar颜色、status文字颜色(新增)

评论区,有同学提出能否”不同Fragment中切换状态栏颜色和状态栏文字的颜色,甚至同时切换风格(纯色状态栏变成banner往上顶的状态栏)的情况”,这种情况肯定是没有问题的,也不难,现在状态栏和标题栏都是我们自己,我们想让它怎么样,它不得乖乖听话,对不~

先上图:

这里写图片描述

其实调整的不多,这里我只贴下关键代码,gitub代码仓库已更新,大家可以clone看完成代码。

这是只有Banner的fragment:

@Override

public void onHiddenChanged(boolean hidden) {

super.onHiddenChanged(hidden);

//设置ToolBar隐藏

mActivity.mToolbar.setVisibility(View.GONE);

//设置statusBar的隐藏

mActivity.mStatusBarView.setVisibility(View.GONE);

//恢复默认statusBar文字颜色

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)

mActivity.getWindow().getDecorView().setSystemUiVisibility(View.VISIBLE);

mActivity.mStatusBarView.setVisibility(View.GONE);

}

改变statusBar字体颜色

@Override

public void onHiddenChanged(boolean hidden) {

super.onHiddenChanged(hidden);

//设置ToolBar显示

mActivity.mToolbar.setVisibility(View.VISIBLE);

//设置ToolBar的颜色

mActivity.mToolbar.setBackgroundColor(getResources().getColor(R.color.colorAccent));

//设置statusBar的颜色

mActivity.mStatusBarView.setBackgroundColor(getResources().getColor(R.color.colorAccent));

//设置statusBar显示

mActivity.mStatusBarView.setVisibility(View.VISIBLE);

//设置statusBar字体颜色

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)

mActivity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

}

接下来是思考题。

7

思考一

思考一、Activity中window是怎么回事?里面有什么View/ViewGroup

写了个方法,将整个Window内的View都打印出来了

private void printChildView(ViewGroup viewGroup) {

Log.i(“printView-ViewGroup”, viewGroup.getClass().getSimpleName() + “的子View和数量:” + viewGroup.getChildCount());

for (int i = 0; i < viewGroup.getChildCount(); i++) {

String simpleName = viewGroup.getChildAt(i).getClass().getSimpleName();

Log.i(“printView-ChildView”, simpleName);

}

for (int i = 0; i < viewGroup.getChildCount(); i++) {

if (viewGroup.getChildAt(i) instanceof ViewGroup) {

printChildView((ViewGroup) viewGroup.getChildAt(i));

}

}

}

这是结果

printView-ViewGroup: DecorView的子View和数量:1

printView-ChildView: LinearLayout

printView-ViewGroup: LinearLayout的子View和数量:2

printView-ChildView: ViewStub

printView-ChildView: FrameLayout

printView-ViewGroup: FrameLayout的子View和数量:1

printView-ChildView: ActionBarOverlayLayout

printView-ViewGroup: ActionBarOverlayLayout的子View和数量:2

printView-ChildView: ContentFrameLayout

printView-ChildView: ActionBarContainer

printView-ViewGroup: ContentFrameLayout的子View和数量:2

printView-ChildView: View

printView-ChildView: ConstraintLayout

printView-ViewGroup: ConstraintLayout的子View和数量:1

printView-ChildView: AppCompatTextView

printView-ViewGroup: ActionBarContainer的子View和数量:2

printView-ChildView: Toolbar

printView-ChildView: ActionBarContextView

printView-ViewGroup: Toolbar的子View和数量:1

printView-ChildView: AppCompatTextView

printView-ViewGroup: ActionBarContextView的子View和数量:0

最后

总而言之,Android开发行业变化太快,作为技术人员就要保持终生学习的态度,让学习力成为核心竞争力,所谓“活到老学到老”只有不断的学习,不断的提升自己,才能跟紧行业的步伐,才能不被时代所淘汰。

在这里我分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。需要的朋友可以私信我【资料】或者 点这里 免费领取

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记

P-1645093896623)]

还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。 领取地址: Android学习PDF+架构视频+最新面试文档+源码笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值