У меня NestedScrollView есть RecyclerView, у каждого адаптера есть
и я хочу, чтобы пользовательское действие TextView select использовало kt ext
fun TextView.customMenuCallBack() {
var selectAll = false
customSelectionActionModeCallback = object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return true
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return true
}
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
item?.let {
return when (it.itemId) {
android.R.id.selectAll -> {
selectAll = true
false
}
android.R.id.copy -> {
if (selectAll) {
//TODO set content
try {
val clipboard: ClipboardManager = context.getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText(context.toString(), content)
clipboard.setPrimaryClip(clip)
} catch (e: Exception) {
e.printStackTrace()
}
}
//make custom action work return true
true
}
else -> {
false
}
}
}
return false
}
override fun onDestroyActionMode(mode: ActionMode?) {
}
}
}
У меня появляются некоторые проблемы:
меню не скрывается после клика по пункту меню
Влияет на прокрутку, при прокрутке вперед она внезапно возвращается к ближайшей выделенной текстовой позиции
Не работает в MIUI ROM
Я исправил часть проблем
меню не скрывается после клика по пункту меню
Влияет на прокрутку, при прокрутке вперед она внезапно возвращается к ближайшей выделенной текстовой позиции
fun TextView.customMenuCallBack() {
var selectAll = false
customSelectionActionModeCallback = object : ActionMode.Callback {
override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return true
}
override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
return true
}
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
item?.let {
return when (it.itemId) {
android.R.id.selectAll -> {
selectAll = true
false
}
android.R.id.copy -> {
if (selectAll) {
//TODO set content
try {
val clipboard: ClipboardManager = context.getSystemService(AppCompatActivity.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText(context.toString(), content)
clipboard.setPrimaryClip(clip)
} catch (e: Exception) {
e.printStackTrace()
}
}
//fixed first issue
mode?.finish()
//fixed second issue
clearFocus()
//make custom action work return true
true
}
else -> {
false
}
}
}
return false
}
override fun onDestroyActionMode(mode: ActionMode?) {
}
}
}
обновление: Настройте мой NestedScrollView2: NestedScrollView и переопределите
override fun requestChildFocus(child: View?, focused: View?) {
//do nothing prevent focused issued
}