Sobes.tech
Middle

Mesélj a módszerekről, amelyek újrarajzolják a nézetet.

sobes.tech MI

Válasz az MI-től

Módszerek:

  • invalidate(): Megjelöli a nézetet "szennyezettként", ami újrarajzolást igényel. Az onDraw() végrehajtását a jövőben ütemezi. Az újrarajzolás a fő szálon történik. Használható, ha a nézet külső tulajdonságai (szín, háttér stb.) megváltoznak.
  • postInvalidate(): Hasonló az invalidate()-hez, de bármely szálból hívható, nem csak a főből. Biztonságos háttérszálakból való használatra.
  • requestLayout(): Megjelöli a nézetet "érvénytelennek", ami a méretének és pozíciójának újraszámítását igényli. Az onMeasure() és onLayout() végrehajtását ütemezi, majd az onDraw()-t. Használható, ha a nézet méretei vagy pozíciója változik (pl. gyermekelemek hozzáadása/eltávolítása a ViewGroup-ban).

Metódusok összehasonlítása:

Metódus Hívási szál Layout újraszámítása Újrarajzolás
invalidate() UI szál Nem Igen
postInvalidate() Bármely szál Nem Igen
requestLayout() UI szál Igen Igen (layout után)

Példa az invalidate() használatára:

// A nézet színének megváltoztatása és újrarajzolás kérés
myView.setBackgroundColor(Color.RED)
myView.invalidate()

Példa a requestLayout() használatára:

// Gyermek elem hozzáadása a LinearLayout-hoz és layout újraszámítása, majd újrarajzolás
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()