2011-06-28 17 views
7

Próbuję utworzyć obramowanie układu z rogami, które są kwadratowe na zewnątrz i okrągłe wewnątrz. I zostały zebrane, że muszę stworzyć xml rozciągliwej definicję składający się z dwóch kształtach: jeden o promieniu szerokości obrysu i narożną i innym tylko o szerokości skok:Obramowanie w kształcie kwadratu z okrągłymi krawędziami wewnętrznymi

kanału alfa/

round_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="4dp" android:color="#FF000000" /> 
    <padding android:left="7dp" android:top="7dp" 
      android:right="7dp" android:bottom="7dp" /> 
    <corners android:radius="4dp" /> 
    <solid android:color="#FFC0C0C0" /> 
</shape> 

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" android:color="#FF000000" /> 
    <solid android:color="#FFC0C0C0" /> 
</shape> 

Każda z tych prac independantly jako obramowanie kiedy appliedby sobie tak:

android: tło = "@ rozciągliwej/round_border", ale gdy jeden lub oba są dodawane do listy pozycja-rozciągliwej tak:

composite_border.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <layer-list> 
     <item android:drawable="@drawable/round_border"/> 
     <!-- <item android:drawable="@drawable/square_border"/> --> 
    </layer-list> 
</shape> 

oraz:

android: background = "@ drawable/composite_border"

Tło layoutu jest całkowicie czarne, a nie tylko czarna ramka - czy każdy wie, jak skonfigurować listę warstw do wykonania tego zadania?

+0

dzięki za udostępnienie tego! – cV2

Odpowiedz

2

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" 
      android:color="#FF000000" 
    /> 
    <solid android:color="#FFC0C0C0" /> 
</shape> 

composite_border.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <layer-list> 
     <item android:drawable="@drawable/round_border"/> 
     <!-- <item android:drawable="@drawable/square_border"/> --> 
    </layer-list> 
</shape> 

uważaj komentarze i cudzysłowów! =]

+0

Dzięki - poprawiłem wpis. – jchristof

+0

Dzięki - wciąż szukam odpowiedzi. – jchristof

4

Od Shape Drawable Doc widać, że nie mogą mieć kształt Layer-listy wewnątrz więc należy zdefiniować composite_border.xml jak ten

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/square_border"/> 
    <item android:drawable="@drawable/round_border"/> 
</layer-list> 

pamiętać, że zmieniła kolejność elementów wewnątrz warstwy -list jak podano w dokumentacji warstwy liście
Each drawable in the list is drawn in the order of the list—the last drawable in the list is drawn on top
i chcesz go do kwadratu z zewnątrz

0

Spróbuj to będzie działać wystarczająco dobrze:

solid jest kolor tła

stroke jest granicy

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid 
     android:color="@color/white"/> 
    <stroke android:width="1dp" android:color="#ffaaaaaa" /> 
    <size 
     android:width="15dp" 
     android:height="15dp"/> 
</shape> 
2

utworzyć plik xml

jak round_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:color="#CCCC33"/> 
    <size 
     android:width="35dp" 
     android:height="35dp"/> 
</shape> 

w układzie ustawić jako tło

<LinearLayout 
       android:id="@+id/layout_wellbeing" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:background="@drawable/rounded_corner_leuvan" 
       android:orientation="horizontal" > 
</LinearLayout> 
Powiązane problemy