2010-10-11 19 views
35

9 yama görüntüyü kullanmak için arka plan güncelleştirirken bu sorunla karşılaştım. Düzen, aynı resmin farklı boyutlarını kullanarak farklı ekranlarda iyi, ancak görüntüyü 9-yama olarak değiştirdiğimde, tüm düzeni gizemli bir şekilde kırıyor.9-yama arka plan ile kırık Android düzeni

önceki düzen şuna benzer:

Original layout http://onik.org/android/layoutOk.png.

9-yama değiştirildi:

9-Patch image http://onik.org/android/layoutError.png.

XML dosyası aynı kaldı, yalnızca PNG dosyaları değiştirildi.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/bg"> 

    <TextView 
     android:text="@string/title" 
     android:id="@+id/login_title" 
     android:layout_width="fill_parent" 
     android:layout_height="40px" 
     android:textSize="30px"> 
    </TextView> 

    <View 
     android:id="@+id/login_underline" 
     android:layout_width="wrap_content" 
     android:layout_height="2px" 
     android:background="#aaaaaa"> 
    </View> 

    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:stretchColumns="1" 
     android:gravity="center" 
     android:paddingLeft="10px" 
     android:paddingRight="10px"> 

     <TableRow> 
      <TextView 
       android:id="@+id/login_usernameLabel" 
       android:text="@string/login_usernameLabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:paddingRight="5px"> 
      </TextView> 

      <EditText 
       android:text="" 
       android:id="@+id/login_username" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:inputType="textEmailAddress" 
       android:lines="1" 
       android:nextFocusDown="@+id/login_password"> 
      </EditText> 

     </TableRow> 

     <TableRow> 

      <TextView 
       android:id="@+id/login_passwordLabel" 
       android:text="@string/login_passwordLabel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"> 
      </TextView> 

      <EditText 
       android:text="" 
       android:id="@+id/login_password" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:nextFocusDown="@+id/login_login" 
       android:inputType="textPassword"> 
      </EditText> 

     </TableRow> 

     <TableRow android:gravity="right"> 

      <Button 
       android:text="@string/login_login" 
       android:id="@+id/login_login" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"> 
      </Button> 


    </TableRow> 

     <TableRow> 

      <CheckBox 
       android:id="@+id/login_remember" 
       android:text="@string/login_remember" 
       android:layout_span="2"> 
      </CheckBox> 

     </TableRow> 

</TableLayout> 


</LinearLayout> 

Herhangi bir fikir? Ya da ölçeklendirilmemiş, ortalanmış arka plan elde etmek için diğer çözümler?

+8

burada görüntü yeniden yüklemek Could Satır içi görüntüler olarak şu anda sitenizden eksikler, bu soruyu biraz daha az okunabilir hale getiriyor. –

+0

Ah, üzgünüm, buraya bağlı olduklarını unuttum. Evde eski yedeklerim olup olmadığını görmeye çalışacağım, ama ben gittiklerini sanıyorlar ... – onik

+0

Günümü kurtardın. Bu hata ayıklaması çok zordu. TEŞEKKÜR !!! –

cevap

99

:) mevcut olsaydı ben sadece bu otomatik olurdu düşünce

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/bg" 
    android:padding="0dip"> 

Güncelleme:

Android Docs tam açıklamaya sahiptir:

"Ayrıca tanımlayabilirsiniz sağ ve alt çizgiler üzerinde bir çizgi çizerek görüntünün isteğe bağlı bir çekilebilir bölümü (etkin bir şekilde, doldurma çizgileri). Bir Görünüm nesnesi, NinePatch'i arka plan olarak ayarlarsa ve ardından View'un metnini belirtirse, tüm metin, yalnızca sağ ve alt çizgiler (dahil edilmişse) tarafından belirlenen alana sığdırılır. Dolgu çizgileri dahil değilse, Android bu çekilebilir alanı tanımlamak için sol ve üst çizgileri kullanır. "

biz dolgu XML düzeninde açıkça öznitelik ayarlamanız gerekir bu varsayılan davranışı göz ardı etmek

+0

için teşekkürler :) Ama neden bu işe yaradığını biliyor musun? Ya da böcek ne? –

+2

http://developer.android.com/guide/developing/tools/draw9patch.html sağ ve alt taraflar 9-yama görüntüsünün içindeki dolguyu tanımlar. Bu düzeltmeleri ya 9-yama görüntüsünde ya da açıkça xml düzeninde – vokilam

+0

@ VokilaM olarak ayarlamalısınız, android belgelerinde yukarıda değinilen bilgilerin nerede bulunduğunu bilmek istiyorum. Çözümünüz benim de sorunumu çözdü. – JRC

3

Sorun çözüldü, 9-yama üzerindeki dolgu alanım uygun değildi. Dolgu alanını, gerdirilebilir alanın tersi olarak çizdiğimde, görüntü çalışmaya başladı. hiçbir doldurma alanı sadece senin düzen etiketine Özellik

android:padding="0dip" 

eklemek demektir

+0

Yukarıdaki cevabı seçmek isteyebilirsiniz - Tanımladığınız ve ayarladığınız aynı sorunu yaşadım 0 ting yastıklama sorunu çözüldü – Bostone

+0

Ben de düşündüm .. ne zaman kaybı .. çalıştı .. VokilaM – user606669

0

Kullanım 9-yama set içerik çizgisi (sağ ve alt)!