我目前使用的體系結構中有多個片段,我在同一活動中進行了交換。
我需要能夠爲這些片段之一使用不同的背景顏色,但我不想使用添加一層透支的懶惰解決方案。
爲了清晰起見:我有一個由我的主題設置的窗口背景,並在其上面繪製了卡片&列表。在我的一個片段中,我需要一個稍微不同的窗口背景顏色。
有沒有辦法做到這一點?我已經嘗試使用ContextThemeWrapper,但它似乎不工作(也許是因爲背景已被繪製?)從片段更改應用程序的背景顏色
在此先感謝您的幫助。
我目前使用的體系結構中有多個片段,我在同一活動中進行了交換。
我需要能夠爲這些片段之一使用不同的背景顏色,但我不想使用添加一層透支的懶惰解決方案。
爲了清晰起見:我有一個由我的主題設置的窗口背景,並在其上面繪製了卡片&列表。在我的一個片段中,我需要一個稍微不同的窗口背景顏色。
有沒有辦法做到這一點?我已經嘗試使用ContextThemeWrapper,但它似乎不工作(也許是因爲背景已被繪製?)從片段更改應用程序的背景顏色
在此先感謝您的幫助。
只是覺得:你片段的初始化過程中調用
ColorDrawable cd = new ColorDrawable(getActivity().getResources().getColor(
R.color.your_color));
getActivity().getWindow().setBackgroundDrawable(cd);
,當它連接到活動
這是可行的。
由於多種原因,使用窗口背景是一個壞主意。首先它會導致你認爲你正在避免的透支。欲瞭解更多信息,請看這裏:http://android-developers.blogspot.co.il/2009/03/window-backgrounds-ui-speed.html –
@EricBarr相反,它避免了增加透支:我已經有一個窗口背景,只是想改變我的片段之一的顏色。爲了更加清晰,我編輯了問題和答案。 – Teovald
不幸的是,在運行時更改片段的背景不受支持。爲了獲得這個功能,你可以將你的片段包裝在一個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)
儘管這取決於你的片段的佈局,所以它可能會或可能不會工作。
你想在運行時動態地或者在編譯時靜態地改變它嗎? –
動態。 我有一個結構可以與Play商店的導航抽屜相媲美,可以在多個全屏幕(減去操作欄)片段之間切換。其中一個片段需要使用不同的背景顏色。 – Teovald