2016-05-13 100 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

使用我在我的编辑部分 –