Como ligar uma View personalizada a um Layout personalizado?
sobes.tech IA
Resposta da IA
Existem várias formas:
-
Utilização do construtor com um conjunto de atributos
AttributeSet: Esta é a forma mais comum. No construtor do View, pode ler os atributos do markup XML e aplicá-los.public class MyCustomView extends View { public MyCustomView(Context context, AttributeSet attrs) { super(context, attrs); // Ler atributos de attrs TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomView); // Obter valores de atributos, por exemplo: // int someValue = a.getInt(R.styleable.MyCustomView_someAttribute, defaultValue); a.recycle(); // É importante libertar o TypedArray // Inicializar a View com base nos atributos lidos // ... } // ... outros construtores e métodos }Ao definir um layout personalizado em XML, pode usar esses atributos:
<com.example.app.MyCustomView android:layout_width="wrap_content" android:layout_height="wrap_content" app:someAttribute="someValue" /> -
Inflar layout dentro da View: Se a View consiste em várias outras Views, pode inflá-las a partir de um arquivo XML separado dentro da sua View personalizada.
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); // Agora pode encontrar elementos dentro de my_custom_layout // TextView myTextView = findViewById(R.id.myTextView); // ... } // ... outros construtores e métodos }my_custom_layout.xmlpode parecer assim:<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="Olá Layout Personalizado!" /> <!-- outros elementos do layout --> </LinearLayout>Depois, este layout personalizado
MyCompositeViewé usado noutro ficheiro XML:<com.example.app.MyCompositeView android:layout_width="match_parent" android:layout_height="wrap_content" />
A escolha do método depende da complexidade da View personalizada: para Views simples com poucos elementos, o primeiro método é suficiente; para Views compostas com uma estrutura interna mais complexa, o segundo método é mais adequado.