Domanda

Sto cercando di creare un controllo riutilizzabile che posso solo aggiungere dove mi piace con controlli già esistenti, quindi non ho bisogno di attributi, non ho bisogno di nulla da aggiungere.

Voglio solo che il controllo mostri il mio editor visivo quando trascino la "vista personalizzata" sul layout.

Ho un semplice View_textseek.xml Come layout di esempio che non voglio ricreare ogni volta che voglio "testo e una barba" nel caso in cui lo uso su 3 luoghi diversi (ad esempio: un colorpicker in seguito). O solo un controllo sia con "TextView" che con "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 questa è fondamentalmente la mia 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);
        }
    }
}

Come puoi vedere, voglio solo "raccogliere" più controlli già esistenti e avere una "vista" o "controllo" per gestirli. Non viene visualizzato nell'editore.

O è dovuto al vecchio tipo di bug idiota che devi riavviare l'ambiente per le viste "personalizzate" da caricare correttamente?

E non ho bisogno di attributi speciali sulle mie altre opinioni, niente e voglio solo essere in grado di mostrare questo layout ancora e ancora quando lo aggiungo o qualsiasi altro layout.

Come C#, aggiungi 3 caselle di testo a un controllo solo perché usi 3 caselle di testo ogni volta. Quindi, trascina quel controllo sul modulo ogni volta che vuoi 3 caselle di testo - niente di più!

È stato utile?

Soluzione

Modifica questo codice:

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.
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top