Pergunta

Estou tentando criar um controle reutilizável que eu possa adicionar onde quiser com os controles já existentes, para não precisar de atributos, não preciso de nada para adicionar.

Eu só quero que o controle apareça meu editor visual quando arrasto a "exibição personalizada" para o layout.

Eu tenho um simples view_textseek.xml Como exemplo de layout que não quero recriar toda vez que quero "texto e uma barra de busca", caso eu o use em 3 lugares diferentes (por exemplo: um colorpicker mais tarde). Ou apenas um controle com uma "visão de texto" e um "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>

E esta é basicamente minha classe:

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 você pode ver, eu só quero "coletar" vários controles já existentes e ter uma "visualização" ou "controle" para lidar com isso. Não aparece no editor.

Ou isso é devido ao algum tipo antigo de bug idiota que você precisa reiniciar seu ambiente para que as visualizações "personalizadas" sejam carregadas corretamente?

E não preciso de atributos especiais em minhas outras visualizações, nada e só quero poder mostrar esse layout repetidamente ao adicioná -lo ou qualquer outro layout.

Como C#, adicione 3 caixas de texto a um controle apenas porque você usa 3 caixas de texto a cada vez. Em seguida, arraste esse controle no formulário sempre que quiser 3 caixas de texto - nada mais!

Foi útil?

Solução

Altere 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top