Sobes.tech
Middle

Как да свържа потребителски изглед с потребителски оформление?

sobes.tech AI

Отговор от AI

Има няколко начина:

  1. Използване на конструктора с атрибутен набор AttributeSet: Това е най-разпространеният начин. В конструктора на View можете да прочетете атрибутите от XML разметката и да ги приложите.

    public class MyCustomView extends View {
    
        public MyCustomView(Context context, AttributeSet attrs) {
            super(context, attrs);
            // Четене на атрибутите от attrs
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView);
            // Получаване на стойности на атрибутите, например:
            // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue);
            a.recycle(); // Важно е да освободите TypedArray
    
            // Инициализация на View въз основа на прочетените атрибути
            // ...
        }
    
        // ... други конструктори и методи
    }
    

    При дефиниране на потребителски layout в XML, можете да използвате тези атрибути:

    <com.example.app.MyCustomView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:someAttribute="someValue" />
    
  2. Инфлейтване на layout вътре във View: Ако View се състои от няколко други View, те могат да бъдат инфлейтирани от отделен XML файл вътре във вашия собствен View.

    public class MyCompositeView extends LinearLayout {
    
        public MyCompositeView(Context context, AttributeSet attrs) {
            super(context, attrs);
            LayoutInflater.from(context).inflate(R.layout.my_custom_layout, this, true);
            // Сега можете да намерите елементи вътре в my_custom_layout
            // TextView myTextView = findViewById(R.id.myTextView);
            // ...
        }
    
        // ... други конструктори и методи
    }
    

    my_custom_layout.xml може да изглежда така:

    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/myTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Hello Custom Layout!" />
    
        <!-- други елементи на разположението -->
    
    </LinearLayout>
    

    След това този потребителски layout MyCompositeView може да бъде използван в друг XML файл:

    <com.example.app.MyCompositeView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    

Изборът на метод зависи от сложността на потребителския View: за прости View с минимален брой елементи е достатъчно първото, за по-сложни View с вътрешна структура е по-подходящо второто.