2013-02-28 48 views
3

我在繪製文件夾執行以下按鈕樣式有一個項目一個層列表可抽拉:定義與以高度的一半

<layer-list 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     > 
     <item> 
      <shape 
       android:shape="rectangle" 
       > 
       <stroke android:width="1dp" android:color="#FF666666" /> 
       <corners 
        android:radius="@dimen/corner_radius" 
        /> 
       <solid 
        android:color="#FF000000" 
        /> 
      </shape> 
     </item> 
     <item 
      android:bottom="22dp" android:top="1dp" android:left="1dp" android:right="1dp" 
      > 
      <shape 
       android:shape="rectangle" 
       > 
       <corners 
        android:topLeftRadius="@dimen/corner_radius" android:topRightRadius="@dimen/corner_radius" 
        /> 
       <solid 
        android:color="#10FFFFFF" 
        /> 
      </shape>    
     </item> 
    </layer-list> 

我的問題是我想設置的第二個項目在一半的高度,相對而言,並非絕對。你可以看到我在這裏設置了'android:bottom =「22dp」',因爲我的按鈕高度通常是45dp。但是,無論我的按鈕的高度是多少,我都希望第二項總是在一半的高度。有任何想法嗎?

回答

1

您必須以編程方式執行此操作。

  1. 同時給出層列表和第二項android:id屬性。
  2. 使用getResouces().getDrawable()獲取對層列表和第二項的引用。請務必將圖層列表投射到LayerDrawable
  3. 您可能需要撥打LayerDrawable和第二項Drawable致電Drawable.mutate()
  4. 獲取按鈕高度並使用Drawable.setBounds()相應地修改第二層的繪製矩形。
  5. 使用LayerDrawable.setDrawableByLayerId()替換層列表中更新的Drawable
  6. 將LayerDrawable應用於您的按鈕。
2

隨着@泰勒的幫助下,我找到了一個更簡單的方法來做到這一點: