2013-08-29 12 views
5

ile Android Özel Görünüm Özel görünümümü oluşturdum ve ona bazı özel nitelikler ayarlamak istiyorum. Başka bir görünümün kimliğini bir özellik olarak geçmek istiyorum.Özel Nitelikler

Özel Görünüm attrs i Özel Görünüm kullanmak

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="IdNumber"> 
     <attr name="firstName" format="integer"/> 
     <attr name="lastName" format="integer"/> 
     <attr name="address" format="integer"/> 
     <attr name="birthDate" format="integer"/> 
    </declare-styleable> 
</resources> 

Düzen:

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:custom="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <EditText 
     android:id="@+id/display_name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="text" 
     android:layout_centerHorizontal="true" 
     android:tag="name" 
     android:ems="10" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="number" 
     android:ems="10" 
     android:id="@+id/id_number" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@id/display_name"/> 

    <ge.altasoft.custom_views.IdNumber 
     android:id="@+id/custom_id_number" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_below="@id/id_number" 
     android:paddingLeft="35dip" 
     custom:firstName="@id/display_name"/> 


</RelativeLayout> 

i nitelik değeri elde etmek istiyoruz Özel Görünüm sınıfının yapıcısı,:

public IdNumber (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initViews(); 

     TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.IdNumber); 
     final int N = a.getIndexCount(); 
     for(int i = 0; i < N; i++){ 
      int attr = a.getIndex(i); 
      switch(attr){ 
       case R.styleable.IdNumber_firstName: 
        int firstNameViewID = a.getInteger(attr, -1); 
        break; 
      } 
     } 
     a.recycle(); 
    } 

Sorun, int firstNameViewID = a.getInteger(attr, -1);'un yalnızca 0 olmasıdır, Görünümün kimliği değil. custom:firstName="@id/display_name" < < < Burada yanlış bir şey olmalı, ancak sorunun ne olduğunu bilmiyorum. Özel özniteliğe atadığımda bazı Tamsayı Değeri çalışır, ancak Id-s'de çalışmaz.

Advance'deki yardımlarınız için teşekkür ederiz.

cevap

12
senin <attr name="firstName" format="reference"/> Ve kodu kullanılıyor int firstNameViewID = a.getResourceId(attr, -1);

Umut bu yardım tanımlamak değiştirme

yerine tamsayı <attr name="firstName" format="refernce"/> için kullanılması custom:firstName="@+id/display_name" ve styleable değişikliği!

+0

Yardım ettiğin için teşekkürler. – Jilberta

0

+0

Zaten kullandım ama işe yaramıyor. – Jilberta

+0

ve kimlik kullanımı a.getReference() –

+1

cevabını aldığınız için teşekkür ederiz, ama a.getResourceId (attr, -1) yardımcı oldu. – Jilberta

İlgili konular