Skip to content

Commit a963289

Browse files
committed
Update
1 parent a2833f8 commit a963289

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

app/src/main/java/com/tool/tree/TextEditorActivity.kt

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,26 @@ class TextEditorActivity : AppCompatActivity() {
165165
private fun applyWrapState() {
166166
val editText = binding.editorContent
167167
val horizontalScroll: HorizontalScrollView = binding.editorScrollHorizontal
168+
169+
// Lưu lại vị trí con trỏ và nội dung hiện tại trước khi đổi chế độ
170+
val currentText = editText.text?.toString().orEmpty()
171+
val cursorStart = editText.selectionStart.coerceIn(0, currentText.length)
172+
val cursorEnd = editText.selectionEnd.coerceIn(0, currentText.length)
173+
168174
editText.setHorizontallyScrolling(!wrapEnabled)
175+
169176
val params = editText.layoutParams
170177
params.width = if (wrapEnabled) android.view.ViewGroup.LayoutParams.MATCH_PARENT else android.view.ViewGroup.LayoutParams.WRAP_CONTENT
171178
editText.layoutParams = params
179+
180+
// Chỉ đổi setHorizontallyScrolling()/layoutParams thôi thì TextView không tự dựng lại
181+
// Layout nội bộ theo chiều rộng mới (văn bản đã dàn trang trước đó bị giữ nguyên), nên
182+
// phải set lại text để buộc nó dựng lại layout rồi khôi phục vị trí con trỏ.
183+
editText.setText(currentText)
184+
editText.setSelection(cursorStart.coerceAtMost(currentText.length), cursorEnd.coerceAtMost(currentText.length))
185+
172186
horizontalScroll.isHorizontalScrollBarEnabled = !wrapEnabled
187+
horizontalScroll.scrollTo(0, 0)
173188
}
174189

175190
private fun hasUnsavedChanges(): Boolean {

0 commit comments

Comments
 (0)