簡體   English   中英

使用按鈕更改其他活動的背景

[英]Changing background in other activities with a button

我有個問題。 我有 3 個活動(MainActivity、DetailsActivity、SettingsActivity),在 SettingsActivity 中我有一個切換按鈕“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,它可以很好地將當前布局的顏色更改為灰色。 請幫我。

在單擊按鈕時可能未打開/活動的多個活動中存儲這樣的小設置的一種簡單方法是使用 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);

因此,您實際上正在做的是將背景顏色存儲為持久數據,並在您重新打開/打開要使用該顏色的活動后獲取它。 這種方法的好處是,無論何時關閉應用程序,都會記住首選的背景顏色。 我希望這有幫助。

在同一活動中更改當前活動的背景。 由於 DetailsActivity 沒有運行,你不能這樣做,它給你空指針。 你想吃 3 個蘋果,而你只有一個。 當前活動開始后,更改背景。

更新:

您可以在當前活動中執行此操作,也可以僅在當前活動中執行此操作:

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

不要嘗試在其他未運行的活動中調用它。

setBackground()

或者

setBackgroundColor()

如果您的其他 Activity 處於打開狀態,您應該使用 Intent 向其他 Activity 發送消息。

如何將字符串從一個活動發送到另一個活動?

當您收到 Intent 時,您可以設置活動的背景。

如果您的其他活動尚未打開,您將無法向他們發送 Intent。 在這種情況下,您可以讓每個活動在您的主活動中引用一個靜態值,該值可以包含當前的背景顏色。 您可能希望在創建函數的其他活動中引用該值。

這是一個關於如何從另一個活動引用變量的示例。

如何在另一個活動中獲取變量?

這可能不是處理它的最漂亮的方法,但它應該有效。

正如 Ay Rue 所說,您有 2 個選項:對該按鈕使用靜態變量,然后在每個活動的 onResume 中,檢查靜態變量的值(真或假)。 或者您可以保存一個私有變量 nightMode,然后在需要移動到其他兩個活動時在意圖中傳遞這個值。 如果您之前已經設置並更新了背景顏色,請不要設置背景顏色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM