2017-02-14 35 views
0

一直試圖找出一年現在。很久以前就有了一個臨時的解決方法,但是當我準備在已開發的應用程序中添加新功能時,問題又回來了。如何在android應用程序中動態設置背景顏色?

主要目標:讓用戶能夠選擇幾乎任何顏色作爲應用程序的背景。

當前迭代:我有2個可繪製的圖像,一個綠色,一個藍色。用戶能夠在兩者之間切換,但只能通過:

if (bgColor) { 
     getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.custom_blue_background_simple)); 
    } 
    else { 
     getWindow().setBackgroundDrawable(getResources().getDrawable(R.drawable.custom_green_background)); 
    } 
} 

博客上,如果用戶更改默認從綠色的背景下,以藍色布爾。

現在,我想切換到的顏色,而不是可繪,我曾嘗試:

LayoutInflater layInflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View view = layInflate.inflate(R.layout.main_activity_layout, null); 
    mainLayout = (RelativeLayout) view.findViewById(R.id.mainActivityRelativeLayoutId); 
    mainLayout.setBackgroundResource(R.color.colorRed); 

,但它不會做任何事情!

因此,然後我嘗試像使用可繪製圖像一樣使用它,但顏色(類型int)不是類型可繪製的!所以這段代碼也不起作用。

困境和問題:我有一個顏色選擇器設置/偏好。用戶可以從中挑選任何顏色,並將其保存爲int類型的顏色。 它成功地接受文本顏色:

textView.setTextColor(colorPickerColor); 

colorPickerColor是從顏色選擇器優先檢索int類型的變量

但是,試圖用它來改變佈局或意見的背景時,它什麼都不做。即使設置常量/硬編碼顏色也不會改變顏色(如上面的代碼所示)。我用顏色改變背景的唯一方法是用戶可繪製(現在爲我工作,但效率非常低,因爲我必須爲每種可選顏色提供單獨的可繪圖,可能爲數百或數十億),或者顏色的十六進制代碼,但硬編碼到佈局的XML中,因爲將它放在代碼中什麼也不做(因爲用戶將無法選擇,所以不會有用)。

什麼是正確的方式來改變一個佈局的背景顏色通過指定一個類型爲int的顏色以編程方式/動態通過代碼?我的應用程序支持的最小API是14

注意:我搜索了,但是出現的每個結果都沒有關聯,或者沒有工作。

+1

你嘗試過'view.setBackgroundColor(int color)'嗎?用法示例:'mainLayout.setBackgroundColor(0xFF000000);' – Isaac

+0

@Isaac正確。記住領先的FF,因此它完全不透明。 –

+0

@isaac這不會做任何事情。這不就是我在做什麼嗎? –

回答

0

ColorDrawable將是您的案例的解決方案。假設colorPickerColor是一個整數顏色代碼繪製,背景可以用下面的代碼設置:

mainLayout.setBackgroundDrawable(new ColorDrawable(colorPickerColor)); 

如果colorPickerColor是彩色資源ID,

mainLayout.setBackgroundDrawable(new ColorDrawable(getResources().getColor(colorPickerColor))); 

請注意,setBackgroundDrawable方法已被棄用,您可以調用setBackground來代替。

+0

使用新的ColorDrawable()方法可行,但不是如何張貼。我必須使用它與我在做可繪製圖像的方式相同: getWindow()。setBackgroundDrawable(new ColorDrawable(bgColorPicker)); 這是可以接受的使用,或者是不好的形式? –

+0

@AeonPsych,沒有什麼好或壞的,這只是取決於你的情況。例如,如果您只想讓用戶選擇一種顏色並應用於應用程序的每個活動,則可以在基本活動中將getWindow()設置爲getWindow(),並且所有活動均可擴展到此。如果你想要更多的靈活性,例如,你可能在Activity中導航了多個片段,那麼你可以在片段的mainLayout中設置它(例如可能是佈局的根元素),這樣做,你的應用可以有不同的顏色在不同的屏幕上。 – CodePlay

+0

很奇怪,因爲我無法改變佈局的顏色。 mainLayout.setBackgroundDrawable(new ColorDrawable(colorPickerColor)); 不適合我lol。 出於某種原因,它只適用於當我更改getWindow() –

相關問題