Question

J'essaie de créer un contrôle réutilisable que je peux simplement ajouter où que je aime avec les contrôles déjà existants, donc je n'ai besoin d'aucun attribution, je n'ai besoin de rien à ajouter.

Je veux juste que le contrôle affiche mon éditeur visuel lorsque je fais glisser la "vue personnalisée" vers la mise en page.

J'ai un simple View_textseek.xml Comme exemple la mise en page que je ne veux pas recréer à chaque fois que je veux "texte et une barre" au cas où je l'utiliserais sur 3 endroits différents (par exemple: un colorpicker plus tard). Ou tout simplement un contrôle avec un "TextView" et 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>

Et c'est essentiellement ma 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);
        }
    }
}

Comme vous pouvez le voir, je veux juste "collecter" plusieurs commandes déjà existantes et avoir une "vue" ou un "contrôle" pour les gérer. Il n'apparaît pas dans l'éditeur.

Ou est-ce dû à l'ancien type de bug idiot que vous devez redémarrer votre environnement pour que les vues "personnalisées" soient chargées correctement?

Et je n'ai pas besoin d'attributs spéciaux sur mes autres vues, rien du tout et je veux juste pouvoir afficher cette mise en page encore et encore lors de l'ajouter, ou toute autre mise en page.

Comme C #, ajoutez 3 zones de texte à un contrôle, car vous utilisez 3 zones de texte à chaque fois. Ensuite, faites glisser ce contrôle sur le formulaire chaque fois que vous voulez 3 zones de texte - rien de plus!

Était-ce utile?

La solution

Modifiez ce 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.
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top