我想将状态栏背景设置为渐变主题,状态栏和操作栏颜色应该是相同的渐变可绘制,根据文档,我们可以使用
将颜色设置为API级别21及更高级别的状态栏Python 2.7.13
但我正在搜索类似
的内容<item name="android:statusBarColor">@color/colorPrimary</item>
我见过使用
的例子<item name="android:statusBarDrawable">@drawable/myDrawable</item>
但是在那种情况下状态栏和操作栏重叠(使用fitSystemWindow = true但仍未解决)也尝试使用https://github.com/jgilfelt/SystemBarTint此库但仍然没有运气
提前谢谢!!
答案 0 :(得分:47)
对于想要将渐变颜色设置为状态栏背景的人,可以在setContentView()
之前在活动中使用以下方法 @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);
}
}
感谢每一位人士的帮助
修改强>
如果上述代码无效,请尝试在styles.xml
:
<style name="AppTheme.NoActionBar">
<!-- Customize your theme here. -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
答案 1 :(得分:3)
@sushant gosavi的答案是正确的,但是除非您在DrawerLayout
中执行以下操作,否则它不适用于DrawerLayout
。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="false"
tools:openDrawer="start">
<include
layout="@layout/app_bar_navigation"
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_navigation"
app:menu="@menu/activity_navigation_drawer" />
您必须在android:fitsSystemWindows="false"
中将其更改为false DrawerLayout
,并在子项中将其设置为true
答案 2 :(得分:1)
对于sushant的答案的扩展,因为不推荐使用getColor和kotlin语言。
@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)
}
我们的想法是创建透明状态栏并为整个窗口设置背景,这也将覆盖相同背景中的状态栏。
答案 3 :(得分:1)
第1步:创建状态栏类,如下所示
public class StatusBarView extends View
{
private int mStatusBarHeight;
public StatusBarView(Context context)
{
this(context, null);
}
public StatusBarView(Context context, AttributeSet attrs)
{
super(context, attrs);
if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
}
}
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets)
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
mStatusBarHeight = insets.getSystemWindowInsetTop();
return insets.consumeSystemWindowInsets();
}
return insets;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec),mStatusBarHeight);
}
}
Step2:创建一个可绘制的渐变,如下所示
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:type="linear"
android:angle="135"
android:endColor="#F34D80"
android:startColor="#FF5858"/><!--android:centerColor="#C12389"-->
</shape>
Step3:创建如下所示的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<YOURPACKAGENAME.StatusBarView
android:id="@+id/status_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/toolbar_bg_gradient"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@drawable/toolbar_bg_gradient"
android:elevation="0dp"
android:minHeight="?attr/actionBarSize"
app:contentInsetStartWithNavigation="0dp"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:subtitleTextColor="@android:color/white"
app:theme="@style/AppTheme.AppBarOverlay"
app:titleTextColor="@android:color/white" />
</LinearLayout>
第4步:为活动创建样式
<style name="AppTheme.NoActionBarMain" parent="Base.Theme.AppCompat.Light">
<item name="windowActionBar">false</item>
<item name="android:windowDisablePreview">true</item>
<item name="windowNoTitle">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowEnableSplitTouch">false</item>
<item name="android:splitMotionEvents">false</item>
<item name="android:windowDrawsSystemBarBackgrounds" tools:targetApi="lollipop">true</item>
<item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item>
<item name="android:colorForeground">@color/foreground_material_light</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeStyle">@style/LywActionMode</item>
</style>
<style name="LywActionMode" parent="Base.Widget.AppCompat.ActionMode">
<item name="background">@color/colorPrimary</item>
<item name="backgroundSplit">@color/colorPrimary</item>
</style>
答案 4 :(得分:0)
我在此链接上使用了答案 here. 如果要显示操作栏,请添加下一个代码,使其透明背景
final ActionBar ab = getSupportActionBar();
if (ab != null) {
Drawable gradientBG = getResources().getDrawable( R.drawable.bg_transperant);
ab.setBackgroundDrawable(gradientBG);
}
,然后在bg_gradient.xml
中<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
答案 5 :(得分:0)
添加以下两行对我有帮助:
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
答案 6 :(得分:0)
在这里,您无需任何Java代码即可完成操作
可绘制渐变文件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>
将此添加到您的values/style.xml
<item name="android:windowBackground">@drawable/bg_toolbar</item>
<item name="toolbarStyle">@style/Widget.Toolbar</item>
<item name="android:statusBarColor">#00000000</item>
为工具栏渐变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>
编辑:在“活动布局”文件中添加background android:background="#ffffff"
。
答案 7 :(得分:0)
我这样解决了
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@drawable/backfull</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowActionModeOverlay">true</item>
<item name="windowActionModeOverlay">true</item>
</style>
<style name="AppTheme2" parent="AppTheme.Base">
<item name="colorPrimary">@drawable/backfull</item>
<item name="colorPrimaryDark">@android:color/white</item>>
<item name="colorAccent">@android:color/black</item>
<item name="colorButtonNormal">@android:color/white</item>
</style>
<style name="ToolbarTheme" parent="Widget.AppCompat.Toolbar">
<item name="android:background">@drawable/backfull</item>
<item name="background">@android:color/black</item>
<item name="titleTextAppearance">@style/ToolbarTitleTheme</item>
<item name="popupTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>
<style name="ToolbarTitleTheme">
<item name="android:textColor">@android:color/holo_red_dark</item>
<item name="android:textStyle">bold</item>
</style>
答案 8 :(得分:0)
答案 9 :(得分:0)
sushant goswami提供的答案实际上工作正常,在浪费一天后,我终于意识到状态栏颜色和渐变开始颜色在我的情况下都是相同的,将渐变颜色更改为默认状态栏颜色以外的其他颜色后,运行良好
答案 10 :(得分:0)
将此代码添加到onCreate
- name: Copy files
copy:
src: "{{ playbook_dir }}/../../node/keys"
dest: "{{ destination }}"
现在在可绘制文件夹中添加一个具有名称状态的文件,并将此代码放入
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);