Keep noneditable values readable, selectable, and understandable in their context.
Read-only content lets people inspect information without changing it. Use it for values managed elsewhere, saved details being reviewed, or records that the current person may view but cannot edit. Explain where a change can be made when that information helps the task.
Use TextField or TextEditor with readOnly when preserving a text-entry presentation helps comparison with adjacent editable fields. The native input remains focusable, permits text selection, and participates in native form submission when it has a name. Its change callback is suppressed while read-only.
Use LabeledContent or ordinary labeled text for a display-only summary. Controls such as Toggle and Picker do not gain a read-only mode by analogy with a text field; present their current value as text when editing is not available.
| Need | Choice |
|---|---|
| Copy an account identifier in a form | A labeled read-only TextField |
| Read a long stored note | A read-only TextEditor or document text |
| Review a saved option | LabeledContent with a textual value |
| Temporarily block an operation | Disabled states |
Figure in preparation
Read-only states: component composition
Three ways to present editable, noneditable, and display-only information.
A useful explanation is “Managed by your organization” with an available “Contact administrator” destination. Do not show an edit action that the person cannot use merely to preserve symmetry with other rows.
Read-only is an interaction state, not a permission check or a guarantee that the value is current. The application owns authorization, synchronization, and refresh errors. Preserve the last known value with an explanation when a refresh fails; do not silently replace it with an empty field.
If switching from editing to review, explicitly save or discard the draft according to the task. Setting readOnly does not persist the value. Avoid changing it while people are typing without explaining what happened to their edits.
Use the same label in editing and review modes. Distinguish an absent value from a value that could not be retrieved. Display “Not provided” only when absence is known. For a sensitive value, choose what may be revealed or copied in application policy rather than relying on read-only styling.
Associate labels with inputs and keep restrictions in visible explanatory text. Use native read-only behavior rather than intercepting every keystroke. Check selection, keyboard copying, long values, and screen-reader output. Do not dim essential information to the point that it becomes hard to read.
Display-only summaries usually do not need extra tab stops. Preserve semantic headings and label-value relationships so people can read them in context.
Read TextField, TextEditor, and LabeledContent. Use Forms for transitions between editing and submission.