Middle
Vorbește despre metodele care redesenează View.
sobes.tech AI
Răspuns de la AI
Metode:
invalidate(): Marchează View-ul ca "murdar", necesitând re-desenare. Planifică executareaonDraw()în viitor. Re-desenează în thread-ul principal. Se folosește dacă proprietățile externe ale View-ului (culoare, fundal etc.) se schimbă.postInvalidate(): Similar cuinvalidate(), dar poate fi apelat din orice thread, nu doar din cel principal. Sigur pentru utilizare în thread-uri de fundal.requestLayout(): Marchează View-ul ca "invalid", necesitând recalcularea dimensiunii și poziției. Planifică executareaonMeasure()șionLayout(), apoionDraw(). Se folosește dacă dimensiunile sau poziția View-ului se schimbă (de exemplu, la adăugarea/eliminarea elementelor copil înViewGroup).
Compararea metodelor:
| Metodă | Thread-ul de apelare | Recalculare layout | Re-desenare |
|---|---|---|---|
invalidate() |
Thread UI | Nu | Da |
postInvalidate() |
Orice thread | Nu | Da |
requestLayout() |
Thread UI | Da | Da (după layout) |
Exemplu de utilizare a invalidate():
// Schimbarea culorii View-ului și solicitarea re-desenării
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Exemplu de utilizare a requestLayout():
// Adăugarea unui element copil în LinearLayout și solicitarea recalculării layout-ului și re-desenării
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()