Middle
Μίλησέ μου για τις μεθόδους που ξανασχεδιάζουν το View.
sobes.tech AI
Απάντηση από AI
Μέθοδοι:
invalidate(): Σημειώνει το View ως "βρώμικο", απαιτώντας επανεκτύπωση. Προγραμματίζει την εκτέλεση τουonDraw()στο μέλλον. Η επανεκτύπωση πραγματοποιείται στο κύριο νήμα. Χρησιμοποιείται αν αλλάξουν οι εξωτερικές ιδιότητες του View (χρώμα, φόντο κ.λπ.).postInvalidate(): Παρόμοιο με τοinvalidate(), αλλά μπορεί να κληθεί από οποιοδήποτε νήμα, όχι μόνο από το κύριο. Ασφαλές για χρήση σε φόντο νήματα.requestLayout(): Σημειώνει το View ως "μη έγκυρο", απαιτώντας επαναυπολογισμό του μεγέθους και της θέσης του. Προγραμματίζει την εκτέλεση τωνonMeasure()καιonLayout(), ακολουθούμενη απόonDraw(). Χρησιμοποιείται αν αλλάξουν τα μεγέθη ή η θέση του View (π.χ. κατά την προσθήκη/αφαίρεση παιδιών σε έναViewGroup).
Σύγκριση μεθόδων:
| Μέθοδος | Κύριο νήμα κλήσης | Επαναϋπολογισμός layout | Επανάληψη σχεδίασης |
|---|---|---|---|
invalidate() |
Κύριο νήμα UI | Όχι | Ναι |
postInvalidate() |
Οποιοδήποτε νήμα | Όχι | Ναι |
requestLayout() |
Κύριο νήμα UI | Ναι | Ναι (μετά το layout) |
Παράδειγμα χρήσης του invalidate():
// Αλλαγή χρώματος View και αίτημα επανεκτύπωσης
myView.setBackgroundColor(Color.RED)
myView.invalidate()
Παράδειγμα χρήσης του requestLayout():
// Προσθήκη παιδιού σε LinearLayout και αίτημα επαναϋπολογισμού layout και επανεκτύπωσης
val newTextView = TextView(context)
linearLayout.addView(newTextView)
linearLayout.requestLayout()