2013-11-20 121 views
0

我目前使用的體系結構中有多個片段,我在同一活動中進行了交換。
我需要能夠爲這些片段之一使用不同的背景顏色,但我不想使用添加一層透支的懶惰解決方案。
爲了清晰起見:我有一個由我的主題設置的窗口背景,並在其上面繪製了卡片&列表。在我的一個片段中,我需要一個稍微不同的窗口背景顏色。
有沒有辦法做到這一點?我已經嘗試使用ContextThemeWrapper,但它似乎不工作(也許是因爲背景已被繪製?)從片段更改應用程序的背景顏色

在此先感謝您的幫助。

+0

你想在運行時動態地或者在編譯時靜態地改變它嗎? –

+0

動態。 我有一個結構可以與Play商店的導航抽屜相媲美,可以在多個全屏幕(減去操作欄)片段之間切換。其中一個片段需要使用不同的背景顏色。 – Teovald

回答

2

只是覺得:你片段的初始化過程中調用

ColorDrawable cd = new ColorDrawable(getActivity().getResources().getColor(
       R.color.your_color)); 

    getActivity().getWindow().setBackgroundDrawable(cd); 

,當它連接到活動

這是可行的。

+0

由於多種原因,使用窗口背景是一個壞主意。首先它會導致你認爲你正在避免的透支。欲瞭解更多信息,請看這裏:http://android-developers.blogspot.co.il/2009/03/window-backgrounds-ui-speed.html –

+0

@EricBarr相反,它避免了增加透支:我已經有一個窗口背景,只是想改變我的片段之一的顏色。爲了更加清晰,我編輯了問題和答案。 – Teovald

-1

不幸的是,在運行時更改片段的背景不受支持。爲了獲得這個功能,你可以將你的片段包裝在一個RelativeLayout或類似的東西里面,然後用程序設置背景。

<RelativeLayout 
     android:id="@+id/fragmentContainer1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="#ccc"> 
    <fragment android:name="whatever.fragment.name" 
      android:id="@+id/frag_1" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" /> 
</RelativeLayout> 
通過ID fragmentContainer1代碼獲取

然後和它做view.setBackgroundColor(YourColorVariable)

另一種方法可能是獲取片段,找到根視圖,然後設置背景。 fragment.getRootView().setBackgroundColor(Color.WHITE)儘管這取決於你的片段的佈局,所以它可能會或可能不會工作。

+0

謝謝,但是這會在我的視圖層次結構中添加一層(以及相關的透支),所以它不是一個選項。 – Teovald

+0

你的分段佈局是什麼樣的? 「另一種方式」選項可能適用於您。 –

+0

很抱歉讓你失望,但是有太多的人爲了這個目的在他們的佈局中添加了一層。 – Teovald