2012-04-04 9 views
6

Uygulamam, ekran yapılandırmasına bağlı olarak tek bölümlü bir UI veya iki bölmeli bir UI gösterir. Daha küçük ekranlarda, hem portre hem de manzara üzerinde tek bölmeli olmalıdır. Orta boy ekranlarda (600dp ve üstü "en küçük genişlikte"), yatay yönlendirme iki bölmeli düzeni oldukça iyi karşılar, ancak dikey yönde, tek bölmeli düzeni kullanmalıdır. Daha büyük ekranlarda, her iki yönde de iki bölmeli düzeni kullanmalıdır. Ayrıca 3.2+ stil niteleyicileri (sw600dp ve sw720dp gibi) ve eski "boyut kovanı" niteleyicisini ("xlarge") desteklemeyi de istiyorum.Birkaç farklı ekran yapılandırması, düzen XML'imin bazı bölümlerini çoğaltmak zorunda kalmadan küçük bir düzen kümesine nasıl harita verebilir?

  • res/düzen-sw600dp-kara/main.xml
  • res/düzen-sw600dp-:

    Bunu yapmanın en doğrudan yolu birkaç farklı XML düzeni dosyaları, her yapılandırma için bir oluşturmaktır liman/main.xml

  • res/düzen-sw720dp-kara/main.xml
  • res/düzen-sw720dp portlu/main.xml
  • res/düzen-xlarge portlu/main.xml
  • yeniden
  • res/düzen-port/main.xml
  • res/düzen/main.xml Sonuç olarak

, kod tekrarına çok içinde var/main.xml s/düzen-xlarge-arazi Temel olarak sadece iki ayrı düzeni tanımlayan bu 8 XML dosyası.

Bakım baş ağrısına neden olan tüm bu XML dosyalarını saklamak zorunda kalmadan bunu nasıl yapabilirim?

cevap

11

Düzen takma adlarını kullanabilirsiniz. Düzeninizi doğrudan her bir ekran yapılandırması için XML dosyalarında tanımlamak yerine, iki düzeninizi "onepane.xml" ve "twopanes.xml" adlı iki XML dosyasında tanımlamanız gerekir. Bu dosyalar res/layout'a gider.

Şimdi, bu düzenleri farklı ekran yapılandırmanızla eşleştirmeniz gerekir; bu, "düzen takma adı" tekniğinin kullanışlı olduğu yerdir. Her bir ekran niteleyici birleşimi için, x'in niteleyici birleşimi olduğu res/values-X/layout.xml dosyasında bir XML dosyası oluşturun. Bu dosyada işaret eden bir düzen kaynak ilan ya @ düzeni/onepane veya @ düzeni/twopanes, uygun bir şekilde:

res/değerler sw600dp-kara/Layout.xml:

<resources> 
    <item name="main" type="layout">@layout/twopanes</item> 
</resources> 

res/values-sw600dp-port/Layout.xml:

<resources> 
    <item name="main" type="layout">@layout/onepane</item> 
</resources> 

diğer yapılandırma kombinasyonları için de yapın ve bu şekilde size aradığınızı başarabilirsiniz: Eğer iki Layou haritalayabilirsiniz Düzeninizi kopyalamak zorunda kalmadan birkaç farklı ekran yapılandırmasına ts (onepane ve twopane).

Bu konuda daha fazla bilgi almak için Android Eğitimi "Birden Çok Ekranı Destekleme" derse bir göz atın: http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters

+0

Bu benim için çalışmıyor - Ben LINT uyarıları ve kilitlenme çalışan olsun. Bunun çalışma örnekleri var mı? –

İlgili konular