Pregunta

Estoy tratando de crear un control reutilizable que pueda agregar donde quiera con los controles ya existentes, así que no necesito atributos, no necesito nada para agregar.

Solo quiero que el control aparezca mi editor visual cuando arrastre la "vista personalizada" al diseño.

Tengo un simple ver_textseek.xml Como ejemplo, el diseño de que no quiero recrear cada vez que quiero "texto y una barra" en caso de que lo use en 3 lugares diferentes (por ejemplo: un selector de colores más tarde). O simplemente un control con una "View de text" y un "SeekBar"

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

    <TextView
        android:id="@+id/view_textseek_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:paddingLeft="15dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:text="@string/view_textseek_text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <RelativeLayout
        android:id="@+id/view_textseek_container_seekbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/view_textseek_text"
        android:paddingLeft="10dp"
        android:paddingTop="10dp"
        android:paddingRight="10dp"
        android:paddingBottom="5dp" >

        <SeekBar
            android:id="@+id/view_textseek_seekbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:max="255"
            android:progress="0" />
    </RelativeLayout>

</RelativeLayout>

Y esta es básicamente mi clase:

import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.RelativeLayout;

public class TextSeekView extends RelativeLayout
{

    public TextSeekView(Context context) { super(context); init(context); }
    public TextSeekView(Context context, AttributeSet attrs) { super(context, attrs); init(context); }
    public TextSeekView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); }

    protected void init(Context context)
    {
        if (!isInEditMode())
        {
            LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            layoutInflater.inflate(R.layout.view_textseek, this, true);
        }
    }
}

Como puede ver, solo quiero "recopilar" múltiples controles ya existentes y tener una "vista" o "control" para manejarlos. No aparece en el editor.

¿O se debe a un viejo tipo de error idiota que debe reiniciar su entorno para que las vistas "personalizadas" se carguen correctamente?

Y no necesito atributos especiales en mis otras vistas, nada en absoluto y solo quiero poder mostrar este diseño una y otra vez al agregarlo, o cualquier otro diseño.

Al igual que C#, agregue 3 cuadros de texto a un control Just porque usa 3 cuadros de texto cada vez. Luego, arrastre ese control en el formulario siempre que desee 3 cuadros de texto, ¡nada más!

¿Fue útil?

Solución

Cambiar este código:

protected void init(Context context) {
    LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    layoutInflater.inflate(R.layout.view_textseek, this, true);

    if (!isInEditMode()) {
        // isInEditMode returns true when you show a view on graphical editor. Returns false while showing on running app.
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top