Sobes.tech
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ă executarea onDraw() î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 cu invalidate(), 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ă executarea onMeasure() și onLayout(), apoi onDraw(). Se folosește dacă dimensiunile sau poziția View-ului se schimbă (de exemplu, la adăugarea/eliminarea elementelor copil în ViewGroup).

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()