2009-08-15 15 views
43

Próbuję ustawić wypełnienie w postaci <shape> zadeklarowanej w pliku/układzie XML. Cokolwiek jednak ustawiłem, nic się nie zmieniło w związku z dopełnieniem. Jeśli zmienię jakiekolwiek inne właściwości, widzę efekty w interfejsie użytkownika. Ale nie działa z dopełnieniem. Czy mógłbyś poinformować o możliwych przyczynach takiego stanu rzeczy?Padding nie wpływa na <shape> w układzie XML

Oto Kształt XML Próbuję stylu:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" 
> 
    <stroke android:width="1dp" android:color="#ffffff" 
      android:dashWidth="2dp" 
    /> 

    <solid android:color="@color/button_white_cover" /> 

    <corners android:radius="11dp" /> 

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

Odpowiedz

81

I wreszcie rozwiązany mój problem z wyściółką.

Tak więc wyściółka nie ma wpływu na kształt. Zamiast tego będziesz musiał zastosować dopełnienie w innym losowaniu, które z niego skorzysta. Tak, mam rozciągliwej, która wykorzystuje kształt i tam Mam następujący:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/shape_below"/> 
    <item android:top="10px" android:right="10px" android:drawable="@drawable/shape_cover"/> 
</layer-list> 

tak, jak widać w drugim <item> -elementowe ustawić dopełnienie (górny i prawy). A potem wszystko działa.

Dzięki.

+0

Witam, nie rozumiem, jak zastosować to rozwiązanie problemu. Mam przycisk, który wykorzystuje kształt i ustawienie adnroid: top i android: right nie ma żadnego efektu. Jak rozwiązać ten problem? Dzięki. – icecream

+2

MYŚLĘ, co mówi Lyubomyr, to zrobić coś takiego, co działa dla mnie, ale wtedy kąty zawsze mają nieprzezroczyste białe tło, co powoduje problemy z wyświetlaniem (przepraszam za format w komentarzach!): \t \t \t \t \t \t \t \t \t \t DustinB

+0

Także poza tematem, ale może być przydatny: jeśli używany ciąg dalszy jest tylko kolorem, możesz napisać jak: android: drawable = "@ color/divider". ALE łamie to na starszych urządzeniach. Testowałem to na 2.2 i to było zepsute. Nie jestem pewien, na jakim poziomie stał się akceptowalny. – Pijusn

13

Odpowiedź przez Lyobomyr działa, ale tutaj jest to samo rozwiązanie zastosowano ale bez obciążania tworzenia nowej rozciągliwej, stąd minimalizując bałagan pliku:

How to add padding to gradient <shape> in Android?

+0

Dziękuję za odpowiedź Yahel, ale pamiętaj, aby nie publikować odpowiedzi tylko na link. Zawsze podawaj w odpowiedzi wszystkie niezbędne informacje, ponieważ zawartość linków może się zmienić lub stać się nieważna. – TheIT

31

W kilku komentarzach nie wspomniał , najlepszym sposobem jest owinięcie elementu <shape> w element <item> i ustawienie zamiast niego podkładki. Istnieją jednak inne opcje, które są szczegółowo opisane w poniższym linku. np

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:left="8dp" 
     android:right="8dp" 
     android:top="8dp" 
     android:bottom="8dp"> 

     <shape android:shape="rectangle"> 
      ... 
     </shape> 
    </item> 
</layer-list> 

W zależności od potrzeb, zamiast przy użyciu warstwy-listy, można użyć jednego z następujących rodzajów rozciągliwych:

  • warstwy lista
  • selektor
  • level-lista
  • przejście

Więcej informacji ab z dostępnych rodzajów rozciągliwej zobaczyć this android documentation

Źródła:

+0

Tak, nie wspomniałeś o '' – user924

+0

@ user924 Nie jestem pewien, o co ci chodzi. Można umieścić element wewnątrz obiektu , jeśli służy on celom, ale nie jest konieczne w przypadku pierwotnego pytania ani w celu przekazania ogólnego rozwiązania, które polega na zagnieżdżeniu zawartości wewnątrz obiektu z wyściółką – TheIT

+1

. Chodzi o to, że lepiej podać przykład, który można kopiować i uruchamiać bez edycji, ale w tym przypadku nie zostanie rozwiązany (ponieważ powinien znajdować się wewnątrz ) – user924

3

I rozwiązać ten problem tak:

<shape android:shape="oval" > 
    <stroke android:width="4dp" android:color="@android:color/transparent" /> 
    <solid android:color="@color/colorAccent" /> 
</shape> 

Właśnie dodałem do niego przezroczystą kreskę.

0

Można spróbować wypustkami:

<?xml version="1.0" encoding="UTF-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetBottom="2dp" 
    android:insetLeft="1dp" 
    android:insetRight="20dp" 
    android:insetTop="20dp"> 

    <shape android:shape="rectangle"> 

     <stroke 
      android:width="1dp" 
      android:color="#ffffff" 
      android:dashWidth="2dp" /> 

     <solid android:color="@color/button_white_cover" /> 

     <corners android:radius="11dp" /> 
    </shape> 

</inset> 
Powiązane problemy