سؤال

أحاول إنشاء عنصر تحكم قابل لإعادة الاستخدام يمكنني فقط إضافة أي مكان يعجبني مع عناصر التحكم الموجودة بالفعل ، لذا لا أحتاج إلى سمات ، لا أحتاج إلى إضافتها.

أريد فقط أن يظهر عنصر التحكم المحرر المرئي عندما أسحب "العرض المخصص" إلى التصميم.

لدي بسيطة view_textseek.xml كمثال على التخطيط ، لا أريد إعادة إنشائها في كل مرة أريد "نصًا و SeekBar" في حالة استخدامه في 3 أماكن مختلفة (على سبيل المثال: ColorPicker لاحقًا). أو مجرد تحكم مع كل من "TextView" و "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>

وهذا في الأساس صفي:

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

كما ترون ، أريد فقط "جمع" عناصر تحكم متعددة موجودة بالفعل ولدي "عرض" واحد أو "تحكم" للتعامل معها. لا يظهر في المحرر.

أم أن هذا بسبب نوع قديم من الأخطاء الغبية التي يتعين عليك إعادة تشغيل بيئتك من أجل تحميل طرق العرض "المخصصة" بشكل صحيح؟

ولا أحتاج إلى سمات خاصة على وجهات نظراتي الأخرى ، لا شيء على الإطلاق وأريد فقط أن أكون قادرًا على إظهار هذا التصميم مرارًا وتكرارًا عند إضافته أو أي تصميم آخر.

مثل C#، أضف 3 مربعات نصية إلى عنصر تحكم فقط لأنك تستخدم 3 مربعات نصية في كل مرة. ثم ، اسحب هذا التحكم في النموذج كلما أردت 3 مربعات نصية - لا شيء أكثر من ذلك!

هل كانت مفيدة؟

المحلول

تغيير هذا الرمز:

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.
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top