Android的需求层出不穷,没办法啊,只能研究和查查查了!这次带来一个Android实现状态栏(statusbar)渐变效果的示例,如下图:
?直接上代码: ?
1、首先在你的基类或者Activity中或者你需要使用的地方,在onCreate()方法中:
/*我这里放在了基类里面,当然你会发现只能是大于等于21的*/
public abstract class BaseActivity extends AppCompatActivity {
private View statusBarView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (Build.VERSION.SDK_INT >= 21) {
setStatusBarView();
}
}
private void setStatusBarView() {
//延时加载数据,保证Statusbar绘制完成后再findview。
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
@Override
public boolean queueIdle() {
initStatusBar();
//不加监听,也能实现改变statusbar颜色的效果。但是会出现问题:比如弹软键盘后,弹popwindow后,引起window状态改变时,statusbar的颜色就会复原.
getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
initStatusBar();
// getWindow().getDecorView().removeOnLayoutChangeListener(this);
}
});
//只走一次
return false;
}
});
}
/**
* 颜色渐变
*/
private void initStatusBar() {
if (statusBarView == null) {
//利用反射机制修改状态栏背景
int identifier = getResources().getIdentifier("statusBarBackground", "id", "android");
statusBarView = getWindow().findViewById(identifier);
}
if (statusBarView != null) {
statusBarView.setBackgroundResource(R.drawable.bg_title_gradient);
} else {
// Log.w( "base","statusBarView is null.");
}
}
}
?2、需要一个资源文件 ?
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:angle="180"
android:endColor="#ff232d"
android:startColor="#ff7c45" />
</shape>
总结:注意目前只查到API大于等于21怎么做,之后如果我找到适配低版本的做法就会继续更新的(毕竟现在低版本的手机几乎不见了)!不喜勿喷哦!
|