I want to set status bar background as gradient theme also status bar and action bar color should same gradient drawable, as per documentation we can set color to status bar in API level 21 and above by using
<item name="android:statusBarColor">@color/colorPrimary</item>
But i am searching something like
<item name="android:statusBarDrawable">@drawable/myDrawable</item>
I have seen example that use
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">false</item>
but in that case status bar and action bar overlap (use fitSystemWindow =true but still not solved) also try with https://github.com/jgilfelt/SystemBarTint this library but still no luck
Thank you in advance!!
Step 1: After opening the android studio and creating a new project with an empty activity. Step 2: Navigate to res/values/colors. xml, and add a color that you want to change for the status bar.
To add a gradient to the toolbar, we need to edit our styles. xml. We will choose a theme with no action bar, then we will add our own custom toolbar to the layout. Here, we will change the parent theme, we will use Theme.
Just go to res/values/styles.edit the xml file to change the color of action bar.
A Drawable with a color gradient for buttons, backgrounds, etc. It can be defined in an XML file with the <shape> element.
For some one who want to set gradient color to status bar background you can use following method in your activity before setContentView()
For Java
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void setStatusBarGradiant(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
Drawable background = activity.getResources().getDrawable(R.drawable.gradient_theme);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(activity.getResources().getColor(android.R.color.transparent));
window.setNavigationBarColor(activity.getResources().getColor(android.R.color.transparent));
window.setBackgroundDrawable(background);
}
}
For Kotlin
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
fun setStatusBarGradiant(activity: Activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
val window: Window = activity.window
val background =ContextCompat.getDrawable(activity, R.drawable.gradient_theme)
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = ContextCompat.getColor(activity,android.R.color.transparent)
window.navigationBarColor = ContextCompat.getColor(activity,android.R.color.transparent)
window.setBackgroundDrawable(background)
}
}
Thanks every one for your help
EDIT
If the above code don't work, try to add this in your styles.xml
:
<style name="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
If you want to override status bar with your view then use window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
an extension to the sushant's answer since getColor is deprecated and in kotlin language.
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
fun backGroundColor() {
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent)
window.navigationBarColor = ContextCompat.getColor(this, android.R.color.transparent)
window.setBackgroundDrawableResource(R.drawable.ic_drawable_vertical_background)
}
The idea is to make transparent status bar and setting a background to the whole window which will also cover the status bar in the same background.
Here how you do it without any Java code,
Gradient drawable file drawable/bg_toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="0"
android:startColor="#11998e"
android:endColor="#38ef7d" />
</shape>
add this in your values/style.xml
<item name="android:windowBackground">@drawable/bg_toolbar</item>
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<item name="android:statusBarColor">#00000000</item>
make a new file for your toolbar Gradient values/toolbar.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
<item name="android:background">@drawable/bg_toolbar</item>
</style>
</resources>
Edit: Add background android:background="#ffffff"
in your Activity Layout file.
Add this code in onCreate
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().setStatusBarColor(Color.TRANSPARENT);
android.graphics.drawable.Drawable background = MainActivity.this.getResources().getDrawable(R.drawable.status);
getWindow().setBackgroundDrawable(background);
Now add a file with name status in drawable folder and put this code
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item><!-- Edit hex colors as you like -->
<shape android:shape="rectangle" >
<gradient
android:angle="180"
android:endColor="#806AF8"
android:startColor="#F16EB5" />
</shape></item></layer-list>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With