2012-03-13 86 views
3

我需要創建一個高度爲230dp的漸變(即不是整個屏幕),其餘部分爲純色。我無法弄清楚如何做到這一點 - 我嘗試的所有事情都以漸變擴展填充整個屏幕結束。我現在的XML看起來是這樣的:不能縮放的漸變背景

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item android:top="230dp"> 
     <shape android:shape="rectangle" > 
      <color android:color="#333333" /> 
     </shape> 
    </item> 
    <item> 
     <shape android:shape="rectangle" > 
      <gradient 
       android:angle="270" 
       android:endColor="#333333" 
       android:startColor="#D9D9D9" 
       android:type="linear" /> 

      <size android:height="230dp" /> 
     </shape> 
    </item> 

</layer-list> 

我然後應用繪製爲背景,以我的LinearLayout在XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#333333" > 
    <LinearLayout 
     android:id="@+id/container" 
     android:orientation="vertical" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent" 
     android:background="@drawable/grey_gradient_bg" > 

     <!-- a bunch of content, buttons, etc. --> 

    </LinearLayout> 
</LinearLayout> 

但梯度擴展以填充整個屏幕。

我嘗試過使用PNG作爲背景,但是我得到了the banding problems described here,並且修復程序還沒有幫助我。

+0

如果你的LinearLayout是另一個佈局的孩子那麼也許父母並不像你期待的那樣伸展。你應該提供整個佈局xlm讓我們分析它。 – woodshy 2012-03-13 16:08:51

+0

使用完整版式XML進行編輯。 – matt 2012-03-13 16:36:15

回答

3
  1. 使用RelativeLayout的,而不是一個的LinearLayout
  2. 而不是使用您的梯度佈局的主要容器的背景下,添加一個子視圖,明確地將高度設置爲你想要的大小(230dp)並將該視圖的背景設置爲您的漸變。
+1

啊,我現在明白了。我可以有一個_separate_ RelativeLayout,它除了保存我的漸變背景外,什麼都不做,並且被設置爲一個明確的高度。然後,我的內容可以存在於LinearLayout中,並且兩者都可以設置爲layout_alignParentTop =「true」來解決問題。 – matt 2012-03-13 16:48:06

1

像這樣的東西可以幫助你:)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/container" 
    android:layout_width="fill_parent" 
    android:layout_height="320dip" 
    android:orientation="vertical" 
    android:background="@drawable/grey_gradient_bg"> 
</LinearLayout> 

您遇到的問題是,因爲你的佈局對高度fill_parent

希望這會幫助你。

祝你好運, Arkde

+0

問題是,我的LinearLayout需要擴展以包含內容,這是一個全屏高。 – matt 2012-03-13 16:40:18

+0

你的父母'LinearLayout',具有背景'android:background =「#333333」',將填滿整個屏幕,但是如果我理解你的問題,你只想要屏幕的一部分包含漸變,那是320dp高。爲此,您只需將您的'android:id =「@ + id/container」 '的高度設置爲320dp。我對嗎?或者我誤解了你的問題? – Arkde 2012-03-13 16:46:27

+0

(這是從我原來的問題不清楚,因爲我遺漏了LinearLayout中的內容。) – matt 2012-03-13 16:48:30

0

下面是使用其他的答案我的解決方案:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#333333" > 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="230dp" 
     android:background="@drawable/grey_gradient_bg" 
     android:layout_alignParentTop="true" /> 

    <LinearLayout 
     android:id="@+id/container" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical" 
     android:layout_alignParentTop="true" > 

    <!-- all the content --> 
    </RelativeLayout> 
</RelativeLayout> 

grey_gradient_bg現在簡單:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <gradient 
     android:angle="270" 
     android:endColor="#333333" 
     android:startColor="#D9D9D9" 
     android:type="linear" /> 

</shape>