在几个活动中更改ActionBar的颜色

时间:2013-08-31 22:59:20

标签: android colors background android-actionbar

我已经坚持这个问题几个小时了。所以这就是。我有2个不同的活动。第一个菜单包含以下选项:蓝色,红色,绿色,橙色,紫色。一旦我单击其中一个,第一个Activity的ActionBar的背景颜色就会发生变化而没有任何问题。现在,当我尝试为第二个活动执行此操作时,问题就开始了。换句话说,只需单击一个活动的菜单中的选项,就可以在两个活动中更改两个ActionBars背景颜色。

public class MainActivity extends Activity {
    private static String Hex;


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



Button all_notes= (Button) findViewById(R.id.All_Notes);
all_notes.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        Intent intent =new Intent(MainActivity.this,AllNotes.class);
        startActivity(intent);

    }
});

}

@Override
  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
  } 


@Override
  public boolean onOptionsItemSelected(MenuItem item) {
    ActionBar bar = getActionBar();
    switch (item.getItemId()) {
    case R.id.action_search:

      Toast.makeText(this, Hex, Toast.LENGTH_SHORT)
          .show();
      break;
    case R.id.action_settings:
        Intent intent_1= new Intent(MainActivity.this,Settings.class);
        startActivity(intent_1);
        break;

    case R.id.blue:

        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099cc")));
        Hex="#0099cc";
        break;

    case R.id.pruple:

        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#9933cc")));
        Hex="#9933cc";
        break;

    case R.id.orange:

        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFBB33")));
        Hex="#FFBB33";
        break; 

    case R.id.red:

        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#CC0000")));
        Hex="#CC0000";
        break;

    case R.id.green:

        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#669900")));
        Hex="#669900";

      break;

    default:
        bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#FFBB33")));
        Hex="#FFBB33";
      break;
    }

    return true;
  } 
public String getHex()
{
    return Hex;
}

}

public class Settings extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    MainActivity MA=new MainActivity();
    ActionBar bar=getActionBar();
    bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor(MA.getHex())));
}

}

所以在这里你可以看到我有Mainactivity处理菜单并允许用户输入选择颜色和Setting通过getHex方法获取用户选择的颜色并更改其各自的ActionBar背景。 这显然不起作用。我试图找到一个简单而漂亮的代码,可以做到这一点,但没有成功。欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

MainActivity活动的onCreate方法中创建Settings的新实例并不是一个好主意。基本上MA.getHex()将始终返回null

如果您只需要将Settings活动的操作栏的颜色设置为MainActivity中选定的颜色,请将十六进制值作为额外值传递给Settings活动在意图中(使用Intent.putExtra)并使用Settings.onCreategetIntent().getStringExtra(...)中获取。

顺便说一下,我想你错过了setContentViewSettings.onCreate的来电。