2010-05-26 77 views
11

在xml中使用Android形狀我已經定義了一個漸變,我將它用作按鈕的背景。Android中的自定義按鈕:當我從xml讀取背景時如何獲取邊框/邊框/框架?

這一切都很好,但沒有圍繞按鈕的邊緣。我希望它看起來類似於普通的Android按鈕,但我需要更多的靈活性來控制顏色和外觀。

形狀定義如下:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <gradient android:startColor="#FFFFFF" 
     android:endColor="#00FF00" 
     android:angle="270" /> 
    <corners android:radius="3dp" /> 
    <stroke android:width="5px" color="#000000" /> 
</shape> 

我希望邊界在XML中設置。爲什麼不「中風」修復它?中風似乎沒有做任何事情。 我查了Android開發規範,但無法找到答案: http://developer.android.com/guide/topics/resources/drawable-resource.html

我也通過Android按鈕的所有屬性看,但如預期有沒有這樣的參數,可能因爲它的建成爲正常的Android按鈕。順便說一句,我也檢查ImageButton屬性。

有人可以幫忙嗎? 我知道有另一種方法可以製作具有合適邊緣的圖像並使用ImageButton,但實際上應該有一種方法可以通過編程方式進行修復。

謝謝! Anna

+0

xml代碼沒有出現在我上面的問題中。有人可以告訴我,如果有某些標籤用於獲取stackoverflow框我見過人們用於輸入代碼? – Anna 2010-05-26 11:27:33

+0

(順便說一句:要添加HTML到您的帖子,您必須將每行縮進4個空格,與添加代碼的方式相同,如果不添加代碼,則SO的文本解析器會變得混亂,並且不會顯示HTML。) – 2010-05-26 11:27:35

回答

19

前段時間我有這個問題。雖然我不記得爲什麼我會做出每個決定,但我解決這個問題的方式是使用一個形狀層列表。這可以讓你將一個形狀堆疊在另一個之上。例如,下面的XML創建了一個堅實的黑色輪廓的2px寬的形狀,以中間隔着「灰,白,灰」梯度:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <padding android:left="1dp" 
       android:top="1dp" 
       android:right="1dp" 
       android:bottom="1dp"/> 
      <solid android:color="#FF000000"/> 
      <corners android:radius="3dp"/> 
     </shape> 
    </item> 

    <item> 
     <shape> 
      <padding android:left="2dp" 
       android:top="2dp" 
       android:right="2dp" 
       android:bottom="2dp"/> 
      <gradient android:startColor="#FFB0B0B0" 
       android:centerColor="#FFFFFFFF" 
       android:endColor="#FFB0B0B0" 
       android:angle="315"/> 
     </shape> 
    </item> 
</layer-list> 

如果你希望能夠動態地改變顏色的運行時,那麼事情得到一個很多 messier。再次,爲什麼我必須以某種方式做事情的細節是朦朧的,但我最終不得不創建一個包含自定義ShapeDrawable的自定義視圖類。我開始查看SDK附帶的ApiDemos應用程序中的例子 - 這是一個非常好的資源。

編輯:您的中風可能不會出現的另一個原因是您在color =「....」位之前忘記了android:

+2

編輯:你的中風可能不會出現的另一個原因是你忘了android:在顏色=「....」位之前。而已! – Entreco 2011-08-09 10:03:34

+0

先生,您應該將其設置爲正確答案 – 2012-05-06 19:06:02

3

可能遲到很多,但你必須在顏色之前添加額外的ff。

<stroke android:width="5px" color="#ff000000" />

電賀

1

使用的ImageButton

<ImageButton 
     android:layout_width="40dp" 
     android:layout_height="30dp" 
     android:src="@drawable/left_arrow" 
     android:background="@drawable/button_selector" 
     android:gravity="center"/> 

使用繪製選擇器的ImageButton和定義屬性

<item android:state_pressed="true" > 
    <shape> 
     <gradient 
      android:startColor="@color/startColor" 
      android:endColor="@color/endColor" 
      android:angle="270" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="@color/borderColor" /> 
     <corners 
      android:topLeftRadius="5dp" 
      android:bottomRightRadius="5dp"/> 
    </shape> 
</item> 

<item android:state_focused="true" > 
    <shape> 
     <gradient 
      android:startColor="@color/startColor" 
      android:endColor="@color/endColor" 
      android:angle="270" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="@color/borderColor" /> 
     <corners 
      android:topLeftRadius="5dp" 
      android:bottomRightRadius="5dp"/> 
    </shape> 
</item> 

<item>   
    <shape> 
     <gradient 
      android:startColor="@color/startColor" 
      android:endColor="@color/endColor" 
      android:angle="270" /> 
     <stroke 
      android:width="0.5dp" 
      android:color="@color/borderColor" /> 
     <corners 
      android:topLeftRadius="5dp" 
      android:bottomRightRadius="5dp"/> 
    </shape> 
</item>  

6

我已經有同樣的問題,我觀察到的是中風不是在設計時應用於按鈕作爲邊框,而是在運行時我看到了邊框。

我JST用下面的相同的代碼

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" android:padding="10dp"> 
    <solid android:color="@color/black" /> 
    <stroke android:width="1px" android:color="@color/red" /> 

</shape> 

爲史蒂夫Hanley說abvoe你錯過了機器人:對於顏色屬性。

希望這有助於有人....

+0

它的工作原理。謝謝 :) – 2012-04-24 08:32:27

0

<item android:state_enabled="false" android:drawable="@drawable/button_disabled" /> 

<item android:state_focused="true" android:drawable="@drawable/button_highlighted"/> 
<item android:state_pressed="true" android:drawable="@drawable/button_highlighted"/> 

<item> 
    <shape> 
     <gradient android:startColor="#fdfdfd" android:endColor="#f0f0f0" android:angle="270" /> 
     <stroke android:width="1dp" android:color="#56390a" /> 
     <corners android:radius="3dp" /> 
     <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> 
    </shape> 
</item> 

添加stroke color #56390a將解決這個問題。