2012-01-12 22 views
13

İçinde çalışabilirim Basit bir amacım var. FrameLayout'umun altında açık bir gri arkaplan istiyorum, bunun altında siyah bir bölme çizgisi var (yalnızca etrafta değil). Şimdiye kadar bu var:Nasıl çekilebilir 'altta çalışılır?' Xml

<?xml version="1.0" encoding="utf-8"?> 
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
    <shape android:shape="rectangle" android:gravity="center"> 
     <solid android:color="#EEEEEE" /> 
    </shape> 
    </item> 
    <item> 
    <shape android:shape="line" android:gravity="bottom" > 
     <stroke android:width="1dip" android:color="#010101"/> 
    </shape> 
    </item> 
    </layer-list> 

Ama = yani yerçekimi yok sayar, merkezi aracılığıyla 'alt' bit çizgi çizer. Bunu nasıl düzeltebilirim?

DÜZENLEME: Bu soru çok eskidir. Seçilen cevap mevcut API'lerle, vb. Ile aynı çizgide olmayabilir veya olmayabilir. Artık izlenmeyen, buna eklemek yerine kendi sorunuzu başlatmanız önerilir.

cevap

5

Bunun için dokuz yama görüntü kullanılarak öneriyoruz - burada işi yapmalıyım bir örnek:

Example nine-patch image

(! Sadece küçücük ama vardır)

Eğer Bunu drawable klasörünüze yerleştirin ve FrameLayout öğenizin arkaplanını ayarlayın, sonra istediğiniz sonucu elde etmelisiniz. İçerik gri alana gidecektir ve # 010101 piksel, altta bir çizgi oluşturmak için yatay olarak gerilecektir. Dokuz yama olarak yüklenmesini sağlamak için .9.png uzantısını koruduğunuzdan emin olun. Size

+1

Bu iyi bir nokta olabilir. Aslına bakarsanız, ben hala bu satır için çalışan yerçekimi etiketini almak için sıcak bilmek isterdim - bana çok daha hoş bir çözüm gibi görünüyor ama öneriniz için teşekkürler. –

+1

Yerçekimi etiketinden bahsedilmiyor [burada] (http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html).Saf xml kullanarak bunu gerçekleştirmenin herhangi bir yolunu göremiyorum, ShapeDrawable'ı kod içinde oluşturabilir ve sınırlarını düzenin sınırlarına göre ayarlayabilirsiniz. – kingraam

17

yardımcı

Umut yazık ki drawables için çalışan yerçekimi almak için bir yol bulmuş değil, ama saf xml ile size istediğini elde edebilirsiniz nasıl bulundu:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:top="-2dp" 
     android:left="-2dp" 
     android:right="0dp" 
     android:bottom="1dp" 
     > 
     <shape android:shape="rectangle"> 
      <solid android:color="#EEEEEE"/> 
      <stroke android:width="1dp" android:color="#010101"/> 
     </shape> 
    </item> 
</layer-list> 

İyi şanslar :)

+1

usman

22

Bununla da çok uğraştım. Temel olarak, altta bir sınır yaratmak için, beklediğinizden ters yönde düşünmelisiniz. Kenarlık renginizle bir dikdörtgenle başlarsınız. Bunun üzerine, gerçek rengi alttan bir ofsetle çizersiniz. Juan Pablo Saraceno olarak

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

    <!-- CREATE A RECTANGLE WITH YOUR BORDER COLOR --> 
    <item> 
     <shape android:shape="rectangle" > 
      <solid android:color="#fff"/> 
     </shape> 
    </item> 

    <!-- NOW DEFINE THE NORMAL COLOR--> 
    <item android:bottom="BOTTOM_BORDER_THICKNESS E.G. 4dp"> 
     <shape android:shape="rectangle" > 
      <solid android:color="#ccc"/> 
     </shape> 
    </item> 
</layer-list> 

Veya, önerilen: bunu kullanmaktan

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <color android:color="YOUR_BORDER_COLOR" /> 
    </item> 
    <item android:top="YOUR_BORDER_THICKNESS"> 
     <color android:color="YOUR_BG_COLOR" /> 
    </item> 
</layer-list> 
+3

Bu gerçekten iyi bir cevaptır ve daha iyi konumlandırılmış IMHO olmayı hak ediyor. Bence android, yerçekimini doğru şekilde desteklemeyen ve bunu yapması için zorlayan bir utançtır. Dikdörtgen, şekiller yerine etiketlerini kullanarak bile benim için çalıştı, bu yüzden daha da basit.

+5

tek sorun i overdraw oluşturur size sınırın renk ile tam bir dikdörtgen çizim çünkü sadece gerçek ile overdraw için olmasıdır dikdörtgen. Gerçek çekim olmadan hala 9-yama kazanır. –

+1

Yarı saydam bir üst kısma ve sağlam bir alt kısma ihtiyacınız varsa bu işe yaramaz. Yani sanırım bir dokuz yama ile çalışmak için * olacak * mı? –

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

    <item> 
     <shape android:shape="rectangle" > 
      <solid android:color="@color/Black" /> 
     </shape> 
    </item> 
    <item android:bottom="5dp"> 
     <shape android:shape="rectangle" > 
      <solid android:color="@color/White" /> 
     </shape> 
    </item> 

</layer-list> 
2

Bu çalışıyor!

<item> 
     <bitmap 
     android:gravity="left|bottom" 
     android:src="@drawable/myDrawable" /> 
</item> 
+0

Nop, ShapeDrawable için değil, bir Bitmap çekilebilir değil, çünkü. – nsvir

1

Eh, oldukça eski bir soru, fakat cevapların hiçbiri işte çalışan bir örnektir (gravity çalışma nasıl) gerçek soruyu cevaplamak görünmektedir: Kıyasla

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

    <item> 
     <color android:color="#2196F3"/>  <!-- Background color --> 
    </item> 

    <item android:gravity="bottom"> 
     <shape> 
      <size android:height="10dp" />  <!-- I would suggest 1dp --> 
      <solid android:color="#F50057" /> <!-- Line color --> 
     </shape> 
    </item> 
</layer-list> 

eğer yerçekimini left veya right veya right özniteliğini değiştirmek için height özniteliğini değiştirin width