我正在为一个应该与旧版Android兼容的应用程序工作,因此在经过大量研究后,我得到了一个解决方案,可以使用自定义操作栏更改状态栏的颜色。
但是现在如果我在操作栏下添加任何文本/编辑字段(来自布局),执行时它会出现在操作栏下...... :(由于这个我必须从顶部添加静态边距也许不是一种专业的方式...
我使用以下代码显示操作栏:
// UR create custom action bar
getSupportActionBar().setDisplayOptions(android.support.v7.app.ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(R.layout.custom_action_bar);
// UR change title of action bar
TextView customActionBar = (TextView) findViewById(R.id.action_bar_text);
customActionBar.setText(R.string.title_activity_view_event);
我正在使用以下代码更改状态栏颜色:
public void setStatusBarColor(View statusBar,int color){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow();
w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//status bar height
int actionBarHeight = getActionBarHeight();
int statusBarHeight = getStatusBarHeight();
//action bar height
statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
statusBar.setBackgroundColor(color);
}
}
/**
* This function used internally by setStatusBarColor function
**/
private int getActionBarHeight() {
int actionBarHeight = 0;
TypedValue tv = new TypedValue();
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {
actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
}
return actionBarHeight;
}
/**
* This function used internally by setStatusBarColor function
**/
private int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}