studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android dynamic attributes custom-view

programacion - android: cómo crear una instancia de mi vista personalizada con el constructor de conjunto de atributos



manual de programacion android pdf (2)

Quizás no entiendo lo que estás haciendo o por qué lo haces, pero considero que tu intento con AttributeSet es bastante complicado.

Te sugiero que crees otro constructor como este

public CalendarView(Context context, int backgroundRessourceID) { super(context); setBackgroundResource(backgroundRessourceID); }

Y luego instancia tu CalendarView como este

CalendarView cv = new CalendarView(this, R.drawable.0_bg); cv.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 30));

Espero que esto resuelva tu problema ...

Mi vista personalizada tiene un atributo personalizado dinámico, por ejemplo, el atributo backgroundimage, asignar a través de la semana actual. Quiero usar Construtor CalendarView (Context context, AttributeSet attrs) para pasar varios atributos, e intento crear una instancia del conjunto de atributos con Xml.asAttributeSet, pero no puede funcionar. ¿alguien me puede decir cómo hacerlo?

Nota: mi vista personalizada tiene un atributo dinámico, por lo que no quiero crear una instancia de la vista personalizada mediante el diseño xml. mi solución es incorrecta?

aquí está la vista personalizada:

public class CalendarView extends View { int backgroundImage; public CalendarView(Context context, AttributeSet attrs) { super(context, attrs); backgroundImage = attrs.getAttributeResourceValue("http://www.mynamespace.com", "backgroundimage", 0); } }

aquí está la actividad:

public class TestActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(createTestView(0)); } public CalendarView createTestView(int currentWeek) throws XmlPullParserException, IOException { String attributes = "<attribute xmlns:android=/"http://schemas.android.com/apk/res/android/" " + "xmlns:test=/"http://www.mynamespace.com/" " + "android:layout_width=/"fill_parent/" android:layout_height=/"30/" " + "test:backgroundimage=/"@drawable/"+ currentWeek +"_bg" + "/"/>"; XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser parser = factory.newPullParser(); parser.setInput(new StringReader(attributes)); parser.next(); AttributeSet attrs = Xml.asAttributeSet(parser); return new CalendarView(this,attrs); } }


Debe declarar el atributo como editable en el archivo attr.xml ubicado en los valores del

por ejemplo:

<declare-styleable name="yourView"> <attr name="aAttr" format="dimension" /> <attr name="bAttr" format="dimension" /> >

Después de eso, debe usarlos como esto en su vista personalizada, y debe declarar ambos constructores predeterminados:

public CalendarView(Context context) { super(context); } public CalendarView(Context context, AttributeSet attrs) { super(context, attrs); backgroundImage = attrs.getAttributeResourceValue("http://www.mynamespace.com", "backgroundimage", 0); int typefaceIndex = attrs.getAttributeIntValue("http://schemas.android.com/apk/res/android", "typeface", 0); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.yourView); }

Esto debería funcionar, para obtener parámetros para su vista personalizada. No dude en preguntar si no entiende.

el typeFaceindex es solo un ejemplo que funciona.

Después de eso, debe usar su vista personalizada en el diseño como en cualquier otro:

<com.example.yourView> </com.example.yourView>