Frage

Ich versuche, eine wiederverwendbare Kontrolle zu erstellen, die ich mit bereits vorhandenen Steuerelementen nur hinzufügen kann, wo ich gerne möchte. Daher brauche ich keine Attribute. Ich brauche nichts hinzuzufügen.

Ich möchte nur, dass die Steuerung meinen visuellen Editor zeigt, wenn ich die "benutzerdefinierte Ansicht" zum Layout ziehe.

Ich habe ein einfaches view_textseek.xml Als Beispiel Layout, das ich nicht jedes Mal neu erstellen möchte, wenn ich "Text und eine Suchbarin" möchte, falls ich ihn an 3 verschiedenen Orten verwende (z. B. ein Colorpicker später). Oder nur eine Kontrolle mit einer "Textview" als auch mit einer "Suchbar"

<?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>

Und das ist im Grunde meine Klasse:

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);
        }
    }
}

Wie Sie sehen können, möchte ich nur mehrere bereits vorhandene Steuerelemente "sammeln" und eine "Ansicht" oder "Kontrolle" haben, um diese zu verarbeiten. Es wird im Herausgeber nicht angezeigt.

Oder liegt dies auf die alte Art von idiotischer Fehlern, die Sie Ihre Umgebung neu starten müssen, damit "benutzerdefinierte" Ansichten korrekt geladen werden sollen?

Und ich brauche keine besonderen Attribute für meine anderen Ansichten, gar nichts und ich möchte dieses Layout nur beim Hinzufügen oder eines anderen Layouts immer wieder zeigen können.

Fügen Sie wie C#3 Textboxen zu einem Steuerelement hinzu, nur weil Sie jedes Mal 3 Textboxen verwenden. Ziehen Sie dann diese Steuerung auf das Formular aus, wenn Sie 3 Textboxen wünschen - nichts weiter!

War es hilfreich?

Lösung

Ändern Sie diesen Code:

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.
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top