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

问题描述 投票:0回答:1

我已经被这个问题困扰了几个小时。就是这样我有2种不同的活动。第一个菜单包含以下选项:蓝色,红色,绿色,橙色,紫色。只要单击其中一个,第一个Activity的ActionBar的背景颜色就会毫无问题地发生变化。现在,当我也尝试在第二个活动中执行此操作时,问题就开始了。因此,换句话说,只需单击一个活动中菜单中的一个选项,即可更改两个活动中两个ActionBar的背景色。

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背景。这显然行不通。而且,我试图找到一个简单而漂亮的代码,但没有成功。欢迎任何帮助。

android colors background android-actionbar
1个回答
1
投票

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

[如果只需要将Settings活动的操作条的颜色设置为MainActivity中选择的颜色,则将十六进制值作为额外的意图传递给Settings活动(使用[C0 ]),然后使用Intent.putExtraSettings.onCreate中获取它。

顺便说一句,我认为您错过了getIntent().getStringExtra(...)中对setContentView的呼叫。

© www.soinside.com 2019 - 2024. All rights reserved.