Android Aggiunta di attributi alle viste


Esempio

Le visualizzazioni personalizzate possono anche utilizzare attributi personalizzati che possono essere utilizzati nei file di risorse del layout Android. Per aggiungere attributi alla tua vista personalizzata devi fare quanto segue:

  1. Definisci il nome e il tipo dei tuoi attributi: questo viene fatto all'interno di res/values/attrs.xml ( res/values/attrs.xml se necessario). Il seguente file definisce un attributo colore per il colore del viso della nostra emoticon e un attributo enum per l'espressione della faccina:

    <resources>
        <declare-styleable name="SmileyView">
            <attr name="smileyColor" format="color" />
            <attr name="smileyExpression" format="enum">
                <enum name="happy" value="0"/>
                <enum name="sad" value="1"/>
            </attr>
        </declare-styleable>
        <!-- attributes for other views -->
    </resources>
    
  2. Usa i tuoi attributi all'interno del tuo layout: questo può essere fatto all'interno di qualsiasi file di layout che usa la tua vista personalizzata. Il seguente file di layout crea uno schermo con un sorriso giallo felice:

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_height="match_parent"
        android:layout_width="match_parent">
        
        <com.example.app.SmileyView
            android:layout_height="56dp"
            android:layout_width="56dp"
            app:smileyColor="#ffff00"
            app:smileyExpression="happy" />
    </FrameLayout>
    

    Suggerimento: gli attributi personalizzati non funzionano con gli tools: prefisso in Android Studio 2.1 e versioni precedenti (e possibilmente nelle versioni future). In questo esempio, sostituendo l' app:smileyColor con gli tools:smileyColor comporterebbe che smileyColor non venisse impostato né in fase di esecuzione né in fase di progettazione.

  3. Leggi i tuoi attributi: questo viene fatto all'interno del tuo codice sorgente di visualizzazione personalizzato. Il seguente frammento di SmileyView mostra come SmileyView gli attributi:

    public class SmileyView extends View {
        // ...
    
        public SmileyView(Context context) {
            this(context, null);
        }
    
        public SmileyView(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public SmileyView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            
            TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SmileyView, defStyleAttr, 0);
            mFaceColor = a.getColor(R.styleable.SmileyView_smileyColor, Color.TRANSPARENT);
            mFaceExpression = a.getInteger(R.styleable.SmileyView_smileyExpression, Expression.HAPPY);
            // Important: always recycle the TypedArray
            a.recycle();
    
            // initPaints(); ...
        }
    }
    
  4. (Facoltativo) Aggiungi stile predefinito: questo viene fatto aggiungendo uno stile con i valori predefiniti e caricandolo all'interno della tua vista personalizzata. Il seguente stile predefinito di smiley rappresenta un felice giallo:

    <!-- styles.xml -->
    <style name="DefaultSmileyStyle">
        <item name="smileyColor">#ffff00</item>
        <item name="smileyExpression">happy</item>
    </style>
    

    Che viene applicato nel nostro SmileyView aggiungendolo come l'ultimo parametro della chiamata per obtainStyledAttributes (vedere codice nel passaggio 3):

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SmileyView, defStyleAttr, R.style.DefaultSmileyViewStyle);
    

    Si noti che qualsiasi valore di attributo impostato nel file di layout gonfiato (vedere il codice nel passaggio 2) sostituirà i valori corrispondenti dello stile predefinito.

  5. (Facoltativo) Fornire stili all'interno di temi: ciò viene fatto aggiungendo un nuovo attributo di riferimento di stile che può essere utilizzato all'interno dei temi e fornendo uno stile per tale attributo. Qui semplicemente smileyStyle nostro attributo di riferimento smileyStyle :

    <!-- attrs.xml -->
    <attr name="smileyStyle" format="reference" />
    

    Che quindi forniamo uno stile per il nostro tema dell'app (qui riutilizziamo solo lo stile predefinito del passaggio 4):

    <!-- themes.xml -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="smileyStyle">@style/DefaultSmileyStyle</item>
    </style>