2011-10-01 26 views
34

Sadece hızlı bir soru, bir Android uygulaması geliştirirken kullanılan ids.xml nedir?ids.xml ne için kullanılır?

<resources> 
    <item name="snack" type="id"/> 
</resources> 

Bunun için ne kullanılacak: ben içerdiği android kaynaklar web sayfasında bir örnek gördü?

cevap

17

id.xml genellikle, düzenlerdeki görünümler için kullandığınız kimliği bildirmek için kullanılır.

size verilen xml için

<TextView android:id="@id/snack"> 

gibi bir şey kullanabilirsiniz.

+11

Sadece "ids.xml" içinde tanımlamak için herhangi bir avantajı sadece yapmanın aksine ... android: id = "@ id/snack"? – pyko

+5

Yani, android kullanmalı mıyım: id = "@ + id/newID" veya ids.xml dosyasında newID bildirilsin mi? En iyi çözüm nedir? –

+3

etiketler için de kullanabilirsiniz 'view.setTag (id, değer)' bu görünümü daha sonra görüntülemek için… – SparK

22

ids.xml aşağıdaki avantajlara sahiptir: tüm kimlikleri bildirildi, böylece derleyici bunları tanıyabilir. Eğer böyle bir şey: text2 id.xml için bir başka uygulama düzenleri ve kütüphane projelerine ilişkin olarak ise

+0

Haklısın, bu kesin sorunu yaşıyorum. Eski yazı olduğunu biliyorum.Durumumda, XML dosyasının üstüne kaydetme düğmesine basmalıyım ama ekranda diğer düğmenin ABOVE saveButton yazmasını istiyorum. Kaydet düğmesini bu görüntüyü AŞAĞIDA söylemeye çalıştım ama bu benim için işe yaramadı. – malhobayyeb

+1

Doğru olmasına rağmen, gerçekten çok yardımcı olmuyor. Bu örnekte 'android: layout_alignBelow = "@ + id/text2" yi ve ikinci "TextView", "android: id =" @ id/text2 "' yi yazabilirsiniz. – ataulm

+1

Bu geçerli bir geçici çözümdür, ancak belirtilenden başka bir görünümde bir kimlik bildirmek en iyi stilistik seçim olmayabilir. Dilin amacınızı doğru bir şekilde yansıtması için, kimlik, onu kullanan görünümde bildirilmelidir. –

8

önce refere ilan edildi çünkü

<TextView 
    android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignBelow="@id/text2" 
    android:text="...."/> 
<TextView 
    android:id="@+id/text2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="...."/> 

hata derleme neden olabilir. (Iletişim) düzenini Diyelim ki bir kütüphanede seçeneklerin genel listesini belirtmek demek

<CheckedTextView android:id="@+id/checked_option_one"... 
<CheckedTextView android:id="@+id/checked_option_two"... 
... 

edelim ve görünüm beyanların herhangi kaldırırsanız genel (diyalog) parçası

optionOneCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_one); 
optionTwoCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_two); 

yılında bu görüşleri ele Bir ana projedeki düzenin bir kopyasından, çalışma zamanında "böyle bir alan yok" hata istisnası alırsınız.

Derleyici şikâyet etmez, ancak çalışma zamanında kimlik aslında bilinmemektedir.

id.xml içinde kimlikleri deklare etmek ve

<CheckedTextView android:id="@id/checked_option_one"... 
... 

kullanarak çalışma zamanı hatası önler

+1

"Derleyici şikayet etmiyor" - emin misiniz? En azından, Lint projede mevcut olmayan bir kimlik kullanıldığında şikâyet eder. Ne olursa olsun, bu çalışma zamanı hatasını (tanımladığınız yönteme göre) kaçınmak, semptomu maskelemek olurdu, fakat sorun değil; bir Görünüm'e eklenmeyen bir kimliğe dayalı bir Görünüm almaya çalışıyorsunuz. – ataulm

+0

Cevabım, bir temel uygulamanın bir kitaplık projesinde ve markalı sürümlerin, markalı (ana) uygulamada geçersiz kılınan bir düzen tanımıyla atlanan bazı görünümlerle değiştirilmiş düzenleri kullandığı bir duruma işaret eder. Tam düzen tanımı hala kitaplık projesinde olduğundan, derleyici kimliği bulur, ancak çalışma zamanında orada değil. – mir

+0

AH tamam, güncellememiz için teşekkürler. – ataulm

7

dinamik görünümleri oluştururken, ids.xml yılında kimliklerini predefining yeni oluşturulan görünüm başvurmak için olasılık verir . setId(id) yöntemini kullandıktan sonra, görünümüne XML'de tanımlanmış gibi erişebilirsiniz. Bu blog post'un güzel bir örneği var.

İlgili konular