[英]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.