2011-02-16 12 views
9

He intentado combinar TextView y EditText en un control compuesto que utiliza elementos xml personalizados para pasar los valores predeterminados para cada elemento individual. He estado buscando en los tutoriales/docs aquí:
Building Compound Controls
Passing Custom AttributesCreación de controles compuestos con atributos XML personalizados

Lo que tengo hasta ahora.

Attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <declare-styleable name="FreeText"> 
     <attr name="label" format="string" /> 
     <attr name="default" format="string" /> 
    </declare-styleable> 
</resources> 

mi diseño principal:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <com.example.misc.FreeText 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     myapp:label="label" 
     myapp:default="default" 
    /> 
</LinearLayout> 

Mi compuesto control, FreeText:

public class FreeText extends LinearLayout { 

    TextView label; 
    EditText value; 

    public FreeText(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     this.setOrientation(HORIZONTAL); 

     LayoutParams lp = new LayoutParams(0, LayoutParams.WRAP_CONTENT); 
     lp.weight = 1; 

     label = new TextView(context); 
     addView(label, lp); 

     value = new EditText(context); 
     addView(value, lp); 

     TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FreeText); 
     CharSequence s = a.getString(R.styleable.FreeText_label); 
     if (s != null) { 
      label.setText(s); 
     } 

     a.recycle(); 
    } 
} 

Cuando ejecuto el programa que veo las vistas bien, pero el valor de mi CharSequence, s, siempre es nulo. ¿Puede alguien decirme dónde me estoy equivocando?

Respuesta

7

Odio cuando ve el problema justo después de pedir ayuda.

El problema era que mi espacio de nombres para mis elementos XML personalizados debería haber sido así:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:myapp="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <com.example.misc.FreeText 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     myapp:label="label" 
     myapp:default="default" 
    /> 
</LinearLayout> 
+1

y me encanta el hecho de que usted ha notado el problema justo después de pedir ayuda, y no antes! Me has ahorrado un montón de buscar la misma respuesta en otro lugar. ¡Gracias! – gregko

Cuestiones relacionadas