Controale în Android (widget-uri)
În Android, un control (pentru care se utilizează și denumirea de
widget) este de regulă derivat din clasa android.view.View
, unde sunt
definite câteva caracteristici de bază cu privire la dimensiuni și la
modul de dispunere:
ATRIBUT | TIP OBIECT | DESCRIERE |
---|---|---|
layout_width | View / ViewGroup | lățimea obiectului |
layout_height | View / ViewGroup | înălțimea obiectului |
layout_marginTop | View / ViewGroup | spațiu suplimentar ce trebuie alocat în partea de sus a obiectului |
layout_marginBottom | View / ViewGroup | spațiu suplimentar ce trebuie alocat în partea de jos a obiectului |
layout_marginLeft | View / ViewGroup | spațiu suplimentar ce trebuie alocat în partea din stânga a obiectului |
layout_marginRight | View / ViewGroup | spațiu suplimentar ce trebuie alocat în partea din dreapta a obiectului |
layout_gravity | View | modul de poziționare a elementelor componente în cadrul unui container |
layout_weight | View | proporția pe care o are controlul, raportată la întregul conținut al containerului |
layout_x | View / ViewGroup | poziția pe coordonata x |
layout_y | View / ViewGroup | poziția pe coordonata y |
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_gravity="center"
android:layout_weight="1"
android:layout_x="100dp"
android:layout_y="100dp"
android:text="Example TextView" />
Unele dintre aceste proprietăți pot fi specificate și pentru
containerele în care sunt cuprinse controalele, derivate din clasa
android.view.ViewGroup
.
Valorile pe care le pot lua atributele layout_width
și layout_height
sunt:
-
match_parent
- dacă se dorește ca obiectul să ocupe tot spațiul pe care îl pune la dispoziție containerul său; -
wrap_content
- dacă se dorește ca obiectul să fie restrâns la dimensiunile conținutului său.
În situația în care nu se specifică cel puțin valorile
layout_width
și layout_height
pentru un anumit control, se va genera
o excepție întrucât interfața grafică nu poate fi încărcată
corespunzător.
De asemenea, pot fi specificate valori absolute, exprimate în una din unitățile de măsură:
dp
- pixel independent de rezoluție
Se recomandă să se utilizeze această unitate de măsură în momentul în care se specifică dimensiunea unui control în cadrul unui container. Se asigură astfel faptul că se utilizează o proporție adecvată pentru un control, indiferent de rezoluția ecranului, Android scalându-i dimensiunea automat.
sp
- pixel independent de scală, echivalent cudp
Specificarea dimensiunii ecranului unui dispozitiv mobil se face prin indicarea numărului de pixeli pe orizontală și pe verticală. Pentru a obține densitatea (rezoluția) dispozitivului respectiv, se împarte dimensiunea exprimată în pixeli la dimensiunea exprimată în inchi. Se va compara valoarea obținută cu una dintre valorile standard definite pentru încadrarea dispozitivului mobil într-o anumită categorie de rezoluție:
- 120 dpi - ldpi (Low Density)
- 160 dpi - mdpi (Medium Density)
- 240 dpi - hdpi (High Density)
- 320 dpi - xhdpi (Extra High Density)
- 480 dpi - xxhdpi (Extra Extra High Density)
Formula de conversie între pixeli (px
) și pixeli independenți de
rezoluție (dp
) este:
px = dp * (resolution_category) / 160
Se observă că 1 px
este echivalent cu 1 dp
pe un ecran cu
rezoluția 160 dpi, considerată drept referință în Android.
Dimensiunea (exprimată în pixeli) a unui control poate fi obținută
apelând metodele getWidth()
, respectiv getHeight()
.