使用AppCompat以编程方式更改操作栏背景和文本颜色

时间:2015-04-22 17:25:53

标签: java android

我正在尝试使用AppCompat以编程方式更改操作栏的背景颜色和文本颜色。这是我之前使用Holo主题时使用的代码,但似乎我不能对AppCompat使用相同的东西。有人知道我需要改变什么吗?

ActionBar bar = getActionBar();
    bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#95CDBA")));
    getActionBar().setTitle(Html.fromHtml("<font color='#000099'>Hello World</font>"));

enter image description here

2 个答案:

答案 0 :(得分:12)

而不是getActionBar()使用getSupportActionBar()

修改

您收到错误,因为您的导入错误。请使用以下相同的内容。这很好用。

import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.text.Html;

public class TestActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActionBar actionBar = getSupportActionBar();
        actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#95CDBA")));
        actionBar.setTitle(Html.fromHtml("<font color='#000099'>Hello World</font>"));
    }
}

是的,这是Google的错误,应该有不同的名称。 SupportActionBar会很棒。

如果您无法修复导入,则可以明确指定哪一个

android.support.v7.app.ActionBar actionBar = getSupportActionBar();

答案 1 :(得分:0)

老问题,但我决定添加另一种方法。

如果使用自定义ActionBar,则可以执行以下操作来更改字体,文本颜色,文本本身和背景颜色:

public class MainActivity extends AppCompatActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = findViewById(R.id.mCustom_app_bar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Custom Title");
        applyToolbarTitleFontTextBackgroundAndTextColor(this);

    }

    public static void applyToolbarTitleFontTextBackgroundAndTextColor(Activity context){
        Toolbar toolbar = context.findViewById(R.id.mCustom_app_bar);
        toolbar.setBackground(new ColorDrawable(Color.parseColor("#95CDBA")));
        for(int i = 0; i < toolbar.getChildCount(); i++){
            View view = toolbar.getChildAt(i);
            if(view instanceof TextView){
                TextView tv = (TextView) view;
                tv.setTextColor(Color.parseColor("#ffffff"));
                Typeface titleFont = Typeface.createFromAsset(context.getAssets(), "fonts/mCoolFont.otf");
                if(tv.getText().equals(toolbar.getTitle())){
                    tv.setTypeface(titleFont);
                    break;
                }
            }
        }
    }

}

通过这种方式,您可以完全控制ActionBar的外观。

希望它可以帮助某人。