以编程方式更改状态栏颜色

时间:2015-11-18 17:26:36

标签: android android-actionbar statusbar

我正在为一个应该与旧版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;
}

0 个答案:

没有答案
相关问题