2015-12-15 28 views
5

Ho visto molti post con persone che vogliono sapere come ottenere attributi personalizzati per un componente personalizzato ma questa non è la mia domanda. Ho creato un componente personalizzato e sto cercando di aggiungere attributi, ma quando aggiungo lo spazio dei nomi nella parte superiore del mio file xml trova solo due attributi personalizzati casuali "paddingEnd" e "paddingStart".Gli attributi personalizzati Android non vengono visualizzati

<resources> 
    <declare-styleable name="menu_item_attrs"> 
     <attr name="imageId" format="integer" /> 
     <attr name="menuText" format="string" /> 
    </declare-styleable> 
</resources> 

Questo è un file attrs.xml.

public MenuListItem(Context context, AttributeSet set) { 
    super(context, set); 

    TypedArray a = context.obtainStyledAttributes(set, R.styleable.menu_item_attrs); 
    if (a == null) { 
     return; 
    } 
    CharSequence s = a.getString(R.styleable.menu_item_attrs_menuText); 
    if (s != null) { 
     // do something 
    } 
} 

Questo è il costruttore della mia classe personalizzata.

 <LinearLayout 
      xmlns:custom="http://schemas.android.com/apk/res-auto" 
      android:layout_width="match_parent" 
      android:layout_height="0dp" 
      android:id="@+id/expanding_layout" 
      android:background="#029eed"> 

      <aaron.testappanim.MenuListItem 
       android:layout_height="wrap_content" 
       android:layout_width="wrap_content"/> 
     </LinearLayout> 

Questo è il mio componente in uso. Voglio aggiungere valori a "imageId" e "menuText" ma non sono disponibili. Le uniche cose che mostrano sono relative al padding come mostrato di seguito.

enter image description here

Tutte le idee ragazzi?

risposta

12

Trovato la soluzione.

Come accade è necessario avere il nome stilizzato uguale al nome della classe.

<resources> 
    <declare-styleable name="MenuListItem"> 
     <attr name="my_custom_attribute" format="integer" /> 
    </declare-styleable> 
</resources> 

Molti molti messaggi su questo argomento sono sbagliato in questo caso, come posso vedere un sacco con il nome stili essere completamente diversa.

Speriamo che questo possa impedire a qualcun altro di cadere in questa trappola.

Acclamazioni

+0

questo mi ha aiutato enormemente dopo purga internet per una risposta a questo problema semplice. Grazie! – chaser

-1

La mia soluzione è stata: Nel file attr.xml, si può aver dichiarato il tuo attributo personalizzato come segue

<declare-styleable name="IDEditText"> <attr name="customFont" format="string"/> </declare-styleable>

Qui, il campo del nome del declare-styleable deve essere il nome della visualizzazione personalizzata. Quindi verrà mostrato nei suggerimenti.

In mycase mia abitudine nome della vista è IDEditText, da cui il declare-styleable name = "IDEditText"

+1

Questo è corretto .. comunque è già stata data una risposta! Grazie comunque! – Murphybro2

+0

Sei il benvenuto. Stavo solo avendo questo problema, quindi ho pensato che potesse aiutare qualcun altro – Vishnu

Problemi correlati