Sobes.tech
Middle

Como ligar uma View personalizada a um Layout personalizado?

sobes.tech IA

Resposta da IA

Existem várias formas:

  1. 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" />
    
  2. 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.xml pode 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.