2016-05-13 63 views
2

我有活動,我在用戶觸摸事件上使用了五個片段。我想爲3個片段設置狀態欄顏色,其他兩個片段沒有狀態欄。如何更改片段的狀態欄顏色?

如果我在一個片段的onCreateView方法中使用下面的代碼,它會更改活動的狀態欄,並且我使用getActivity()方法獲得所有片段的白色。所以我正在尋找碎片的解決方案。

getActivity().getWindow.setStatusBatColor(Color.White); 

我也嘗試在style.xml中設置我的主題,並將其應用於xml中的fragemnts根佈局,但它也不能正常工作。

styles.xml

<style name="StatusBarColor" parent="AppBaseTheme"> 
    <item name="android:statusBarColor">#F5F5F5 
    </item> 
</style> 

fragment1.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:fab="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:theme="@style/StatusBarColor" 
android:background="@color/home_bg_white" 
tools:context="mycontext"> 

預先感謝您的幫助。

回答

5

如果要以編程方式更改狀態欄顏色(並且提供的設備具有Android 5.0),則可以使用Window.setStatusBarColor()。活動是否源自ActivityActionBarActivity應該沒有區別。

剛剛嘗試做:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    Window window = getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    window.setStatusBarColor(Color.BLUE); 
} 

與ActionBarActivity只是測試這和它的作品好了。

注:編程設置FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS標誌是沒有必要的,如果你的價值觀-V21的風格文件就已經設置,通過:

<item name="android:windowDrawsSystemBarBackgrounds">true</item> 

編輯2: -

創建的方法您的活動

public void updateStatusBarColor(String color){// Color must be in hexadecimal fromat 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     Window window = getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     window.setStatusBarColor(Color.parseColor(color)); 
    } 
} 

從您的片段調用此方法

((ActivityName)getActivity()).updateStatusBarColor("#000000") 
+0

我想改變片段狀態欄,所以在片段類中它不允許我添加getWindow方法,那就是問題。 –

+0

您的片段必須是活動的一部分。你可以用活動的方法編寫這段代碼,然後從你的片段中調用它。它會解決你的問題。 –

+0

使用我在我的編輯部分 –