2010-06-16 462 views
62

我想要的形狀與左上圓角和左下圓角:如何製作左上角圓角和左下角圓角的形狀?

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#555555"/>  

    <stroke android:width="3dp" 
      android:color="#555555" 
      /> 

    <padding android:left="1dp" 
      android:top="1dp" 
      android:right="1dp" 
      android:bottom="1dp" 
      /> 

    <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="2dp" 
    android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 
</shape> 

但形狀上面沒給我我想要的東西。它給了我一個沒有任何圓角的矩形。

任何人都可以幫忙嗎?

謝謝。

回答

35

它看起來像一個錯誤http://code.google.com/p/android/issues/detail?id=939

最後,我不得不寫這樣的事:

<stroke android:width="3dp" 
     android:color="#555555" 
     /> 

<padding android:left="1dp" 
      android:top="1dp" 
      android:right="1dp" 
      android:bottom="1dp" 
      /> 

<corners android:radius="1dp" 
    android:bottomRightRadius="2dp" android:bottomLeftRadius="0dp" 
    android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 

我必須指定機器人:bottomRightRadius = 「2DP」 的左下方圓角(另一個bug這裏)。

+1

是的,我可以確認你的最後一個聲明/錯誤,左/右切換那裏。我在我的應用中也經歷過同樣的情況。 (sdk 2.1)。您是否已經爲b.android.com提交了一個錯誤報告,或者是否已經在那裏報告過? – 2010-06-17 01:30:14

+3

我剛剛提交了一個錯誤,http://code.google.com/p/android/issues/detail?id=9161。 可悲的是,他們修復了這個錯誤後,我必須再次更改我的代碼:( – user256239 2010-06-17 17:30:35

13

您也可以爲您的半徑使用極小的數字。

<corners 
    android:bottomRightRadius="0.1dp" android:bottomLeftRadius="2dp" 
android:topLeftRadius="2dp" android:topRightRadius="0.1dp" /> 
+0

這是我第一次嘗試...但沒有希望....我在Android 2.2上測試...任何其他想法......謝謝 – 2012-12-25 05:44:11

53

儘管這個問題已經已經回答(這是導致bottomLeftRadius和bottomRightRadius一個bug被逆轉),該bug已被固定在機器人3.1(API等級12 - 在模擬器上測試)。

因此,爲了確保您的繪圖在所有平臺上都看起來正確,您應該在res/drawable-v12文件夾中放置「更正」版本的繪圖(即xml中左下角/右半徑實際上是正確的)你的應用。這樣,所有使用Android版本> = 12的設備都將使用正確的可繪製文件,而使用舊版Android的設備將使用位於res/drawables文件夾中的「解決方法」drawable。

+0

今天碰到這個確切的問題多麼煩人的bug – onit 2012-02-09 20:41:53

+0

+1感謝它對我非常有用 – Praveenkumar 2012-09-05 05:22:09

+5

這應該被接受爲答案 – Abx 2013-10-08 07:19:41

21

documentation

注:每一個角落都必須(最初)被超過1提供一個拐角半徑更大,否則沒有邊角圓潤。如果你想要特定的 角不被舍入,一個解決方法是使用android:radius到 設置一個大於1的默認角半徑,然後用你真正想要的值覆蓋每個角和 ,提供零( 「0dp」) 你不想要圓角。

例如,你必須設置一個機器人:半徑=「」要能夠做到你想要什麼:

<corners 
    android:radius="2dp" 
    android:bottomRightRadius="0dp" 
    android:topRightRadius="0dp"/> 

另一個GOTCHA是,如果你做這樣的事情,Eclipse中的預覽是不正確的。您實際上必須啓動您的應用才能看到實際結果!

+0

只是想在eclipse中指出3.7.2預覽對我來說很不錯 – kyle 2014-09-25 20:27:56

3

此錯誤提交here。 這是API級別小於12的Android設備的一個bug。 您必須將正確版本的佈局放置在drawable-v12文件夾中,該文件夾將用於API級別12或更高級別。 相同佈局的錯誤版本(角切換/反轉)將放在默認的可繪製文件夾中,該文件夾將被API級別低於12的設備使用。

例如:我不得不設計一個按鈕在右下角有圓角。

在'drawable'文件夾中 - button.xml:我不得不使左下角變圓。

<shape> 
    <corners android:bottomLeftRadius="15dp"/> 
</shape> 

在「可繪製-V12」文件夾 - button.xml:佈局的正確版本被放在這裏要用於API級12或更高。

<shape> 
    <corners android:bottomLeftRadius="15dp"/> 
</shape> 
9

他人有任何API級的解決方案,你可以將一個項目上彼此例如頂部:

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

<!-- my firt item with 4 corners radius(8dp) 
--> 
    <item> 
     <shape> 
      <solid 
       android:angle="270.0" 
       android:color="#3D689A" /> 

      <corners android:topLeftRadius="8dp" /> 
     </shape> 
    </item> 
<!-- my second item is on top right for a fake corner radius(0dp) 
--> 
    <item 
     android:bottom="30dp" 
     android:left="50dp"> 
     <shape> 
      <solid android:color="#5C83AF" /> 
     </shape> 
    </item> 
<!-- my third item is on bottom left for a fake corner radius(0dp) 
--> 
    <item 
     android:right="50dp" 
     android:top="30dp"> 
     <shape> 
      <solid android:color="#5C83AF" /> 
     </shape> 
    </item> 

</layer-list> 

淺色結果向您展示三個項目:

enter image description here

最終結果:

enter image description here

此致敬意。

+0

非常感謝:) – 2015-05-30 15:22:47