2011-04-05 24 views
17

Takip eden soru bir süredir beni şaşırtmıştı ve belki de bunun hakkında bir sakıncası olmadığını düşündüm. Aşağıdaki layout.xml ve style.xml dosyalarına sahibim;Stil içindeki kimliklerin tanımlanması güvenli mi yoksa bir felaket mi?

res/düzen/Layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
    <LinearLayout 
     style="@style/headerContainer" /> 
    <LinearLayout 
     style="@style/footerContainer" /> 
    <ScrollView 
     style="@style/contentContainer" />  
</RelativeLayout> 

res/values ​​/ style.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="container"> 
    <item name="android:layout_width">fill_parent</item> 
    </style> 
    <style name="headerContainer" parent="container"> 
     <item name="android:layout_height">40dp</item> 
     <item name="android:layout_alignParentTop">true</item> 
     <item name="android:background">#80FF0000</item> 
     <item name="android:id">@+id/header</item> 
    </style> 
    <style name="footerContainer" parent="container"> 
     <item name="android:layout_height">50dp</item> 
     <item name="android:layout_alignParentBottom">true</item> 
     <item name="android:background">#8000FF00</item> 
     <item name="android:id">@+id/footer</item> 
    </style> 
    <style name="contentContainer" parent="container"> 
     <item name="android:layout_height">60dp</item> 
     <item name="android:layout_below">@id/header</item> 
     <item name="android:layout_above">@id/footer</item> 
     <item name="android:background">#800000FF</item> 
    </style> 
</resources> 

Sorun şu, kimlikleri örtüşen bir tehlike ben takdim edeceğim olarak orada onları style.xml içinde? Komik olan şu ki bu yaklaşım en azından kullanıyorum emülatör üzerinde çalışır, ancak oluşturulan kimlikler R sınıfına eklenmiyor. Yerleşimim şişirildikten sonra nasıl tanımlandıkları biraz kafam karıştı.

cevap

0

ben bu şekilde yapıyorum ve iyi şanslar oldu:

Düzen res/düzen/main.xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <include layout="@layout/action_bar"/> 
</RelativeLayout> 

Yaygın: res/düzen/action_bar.xml

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/action_bar_container" 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/action_bar_height" 
    android:layout_alignParentTop="true" 
    android:paddingLeft="5dip" 
    android:paddingRight="5dip" 
    > 

    <TextView 
     android:id="@+id/action_bar_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:textSize="20dip" 
     android:textStyle="bold" 
     /> 

</RelativeLayout> 
+0

. Ama sonunda belki de her bir layout.xml içinde üstbilgi/altbilgi ayrı ayrı ilan ediyorum, bana sorun olan bazı esneklik verir. Kopyalama/yapıştırma kodunun miktarını, stiller kullanılarak birkaç satıra indirgeyebildiğim sürece. – harism

0

Bu arkadaşım güvenli değil. Farklı dosyalar için farklı bir kimlik kullanmalısınız. Burada emülatör problem olmayacaktır. Anlayacaktır çünkü her xml dosyası için otomatik olarak tanımlanmış özel bir kod R.java dosyası vardır. Yani emülatör oradan çok kolay anlayacaktır. Ancak, herhangi bir derecelendirme için kodu düzeltmeniz veya düzenlemeniz gerekiyorsa, hangi kimliğin hangi xml dosyasının düzenine veya kamaya ait olduğu konusunda kafanız karışacaktır. Bu nedenle, her bir düzen widget'ına benzersiz bir kimlik sunun. İlgili dosya adının bir etiketini içeren kimliği sağlamanız yararlı olacaktır.

Örnek: Dosya adı filldetails.xml ise o zaman id kullanabilirsiniz = + fd_name

uygulamanın akışını bilmek yararlı olacaktır.

17

@+id/... biçemlerini kullanmayın.
@+id/... sadece mizanpajlarda kullanılabilir.
Aksi halde, oluşturma sırasında Error executing apt: return code 139 elde edebilirsiniz.
Kullanım @id/... ve gerekirse yardım kaynağıdır dosyası ile kimlikleri oluşturmak: res/values ​​/ ids.xml:

Ben de düşündüğünü bir seçenek
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <item type="id" name="header" /> 
    <item type="id" name="footer" /> 
</resources> 

http://developer.android.com/guide/topics/resources/more-resources.html#Id

İlgili konular