Как да свържа потребителски изглед с потребителски оформление?
sobes.tech AI
Отговор от AI
Има няколко начина:
-
Използване на конструктора с атрибутен набор
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" /> -
Инфлейтване на 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 с вътрешна структура е по-подходящо второто.