使用按钮更改其他活动的背景

时间:2016-10-13 21:59:59

标签: java android android-activity android-togglebutton

我有问题。我有3个活动(MainActivity,DetailsActivity,SettingsActivity),在SettingsActivity中我有一个Togglebutton" Nightmode"。我想要的是,当按钮被更改时,改变灰色的所有三个活动的背景。

public class SettingsActivity extends AppCompatActivity {
//This is SettingsActivity(not Main one)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);

    TextView SettingsTitle = (TextView) findViewById(R.id.SettingsTitle);
    TextView NightText = (TextView) findViewById(R.id.NightmodeText);
    ToggleButton toggleNightMode = (ToggleButton) findViewById(R.id.toggleNightmode);
    final RelativeLayout NightBG = (RelativeLayout) findViewById(R.id.NightBG);
    final LinearLayout DetailsBG = (LinearLayout) findViewById(R.id.mainBG);
    final LinearLayout HomeBG = (LinearLayout) findViewById(R.id.HomeBG);

    toggleNightMode.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            NightBG.setBackgroundColor(Color.parseColor("#545657"));
            HomeBG.setBackgroundColor(Color.parseColor("#545657"));
            DetailsBG.setBackgroundColor(Color.parseColor("#545657"));

        }
    });

NightBG与该java文件(SettingsActivity)的活动相同。但是HomeBG在MainActivity中,DetailsBG在DetailsActivity中。每次我启动应用程序,并按下该按钮,应用程序崩溃。如果我从此文件中删除HomeBG和DetailsBG,它可以正常工作,将当前布局的颜色更改为灰色。请帮帮我。

4 个答案:

答案 0 :(得分:1)

在按钮单击时可能无法打开/激活的多个活动中存储这样的小设置的一种简单方法是使用SharedPreferences。

对于如此简单的代码,这可能有点过分,但如果您没有找到其他任何内容,您可以随时尝试。

您的代码可能如下所示:

toggleNightMode.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        // Set the color of this activity
        int color = Color.parseColor("#545657")
        View view = SettingsActivity.this.getWindow().getDecorView();
        view.setBackgroundColor(color);
        // Save color preference
        SharedPreferences sharedPref = SettingsActivity.this.getSharedPreferences("bgColorFile",Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPref.edit();
        editor.putInt("color", color);
        editor.apply();    
    }
});

然后当你打开你的活动时,你可以在你的活动的onStart()或onCreate()方法中放置这样的东西:

// Get the color preference
SharedPreferences sharedPref = getSharedPreferences("bgColorFile",Context.MODE_PRIVATE);
int colorValue = sharedPref.getInt("color", 0);
View view = this.getWindow().getDecorView();
view.setBackgroundColor(colorValue);

所以你实际做的是将背景颜色存储为持久数据,并在重新打开/打开要打开颜色的活动时获取它。这种方法的好处是,无论何时关闭应用程序,都会记住首选的背景颜色。我希望这会有所帮助。

答案 1 :(得分:0)

更改同一活动中当前活动的背景。由于DetailsActivity没有运行,你不能这样做,它会给你空指针。你有点尝试吃3个苹果而你只有一个。当前活动开始后,更改背景。

更新

您可以在当前活动和当前活动中执行此操作:

findViewById(android.R.id.content).setBackground(getColor(R.color.your_color));

请勿尝试在未运行的其他活动中调用此方法。

setBackground()

setBackgroundColor()

答案 2 :(得分:0)

如果您的其他活动已打开,则应使用Intent向其他活动发送消息。

How to send string from one activity to another?

当您收到意图时,您可以设置活动的背景。

如果您的其他活动尚未开放,您将无法向他们发送意图。在这种情况下,您可以让每个Activity引用在主活动中包含可包含当前背景颜色的静态值。您可能希望在创建函数的其他活动上引用该值。

以下是有关如何从其他活动引用变量的示例。

How do I get a variable in another activity?

这可能不是处理它的最好方法,但它应该有用。

答案 3 :(得分:0)

如Ay Rue所说,你有两个选择:对该按钮使用静态变量,然后在每个活动的onResume中,检查静态变量的值(true或false)。或者您可以保存私有变量nightMode,然后在需要移动到其他两个活动时在intent中传递此值。 如果您之前已设置并具有更新的背景颜色,请不要设置背景颜色。