tag name manager mail google fecha etiquetas codes chimp android merge custom-controls padding

android - name - shortcode mailchimp



Relleno perdido usando la etiqueta<merge> con Componente Compuesto Personalizado (2)

Aquí hay un componente compuesto personalizado que extiende RelativeLayout e infla un diseño particular de xml:

public class MyCustomView extends RelativeLayout { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.my_custom_view, this); // ... } }

El diseño xml usa la etiqueta <merge> (elimina la capa innecesaria de la jerarquía de vistas, yada yada yada):

<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" ... /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" ... /> ... </merge>

... y uso la vista personalizada en otros diseños como este:

<com.example.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="20dip" />

Todo dentro de la vista personalizada está impecablemente distribuido, pero no se aplica el relleno de 20dips que se supone que rodea a todo el objeto. No parece funcionar si lo puse en la etiqueta <merge> tampoco. La falta de relleno hace que se vea completamente horrible, por supuesto. ¿Dónde se supone que debo colocar el atributo android:padding="20dip" para aplicarlo?

Lo más fácil podría ser hacer que MyCustomView extienda FrameLayout y reemplace la etiqueta <merge> con un <RelativeLayout> - pero eso sacrifica todo el asunto de mantener la jerarquía de vistas poco profunda que Romain Guy se toma tan en serio :)


Ahora utilizo una solución para establecer los rellenos mediante programación. Y buscando probablemente una mejor solución.

// Inflate the view from the layout resource. LayoutInflater li = LayoutInflater.from( context ); View root = li.inflate( R.layout.article_head, this, true ); int padding = convertDip2Pixels( context, 8 ); root.setPadding( padding, padding, padding, padding ); public static int convertDip2Pixels( Context context, int dip ) { return (int)TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, dip, context.getResources().getDisplayMetrics() );


He tenido problemas similares con el relleno no la transferencia. ¿Has intentado usar Margin en su lugar?