2017-03-31 34 views
5

我想將狀態欄背景設置爲漸變主題,狀態欄和操作欄顏色應該是相同的漸變可繪製,根據文檔我們可以將顏色設置爲狀態欄API等級21以上使用如何將狀態欄背景設置爲漸變色或可繪製的android

<item name="android:statusBarColor">@color/colorPrimary</item> 

但是我正在尋找像

<item name="android:statusBarDrawable">@drawable/myDrawable</item> 

我看到的例子,使用

<item name="android:windowTranslucentStatus">false</item> 
    <item name="android:windowTranslucentNavigation">false</item> 

但在這種情況下,狀態欄和操作欄重疊(使用fitSystemWindow =真實的,但仍然沒有解決)也與https://github.com/jgilfelt/SystemBarTint試試這個庫,但仍然沒有運氣

預先感謝您!

回答

20

enter image description here對於一些一誰想要設置漸變顏色,狀態欄的背景,你可以用下面您的活動()方法的setContentView前

感謝每一位對你有所幫助

編輯

如果上述代碼不起作用,請嘗試在您的styles.xml中添加此代碼:

<style name="AppTheme.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 
+0

這個答案是行不通的。我們還需要在狀態欄中獲得漸變效果嗎? –

+0

告訴我你做了什麼!可能是檢查您的設備版本代碼,如果它低於Build.VERSION_CODES.LOLLIPOP意味着21或以下21如果是這個功能是不適用於該設備 –

+0

我沒有實現你的代碼,如你所說 @Override protected void onCreate Bundle savedInstanceState){超級。{ }。的onCreate(savedInstanceState); setStatusBarGradiant(this); setContentView(R.layout.activity_detail); } –

0

自從getColor不贊成使用kotlin語言之後,對sushant的答案進行了擴展。

@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) 
} 

這個想法是做透明的狀態欄,並設置整個窗口的背景,這也將覆蓋在同一背景下的狀態欄。

0

第一步:創建一個狀態欄類像下面

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); 
    } 
} 

第二步:創建繪製漸變像下面

<?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> 

第三步:創建像下面

佈局
<?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> 

第四步:創建一個樣式的活動

<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> 
+0

我應該創建一個類(步驟1)作爲一個單獨的文件或代碼複製到我的活動的課? –

+1

@ArdaÇebi複製代碼並創建一個類 –

+0

行,明白了。 –

相關問題