Android中requestFocus()使TextView获焦但无高亮的问题排查
问题:代码调用requestFocus()后TextView获焦但无高亮显示
我使用搭载Android 9系统、带硬件键盘的Datalogic Memor K移动计算机。在应用中,手动通过硬件方向键可在控件间移动焦点/高亮,包括设置isFocusableInTouchMode = true的TextView控件。但通过代码调用requestFocus()时,返回值为true,TextView看似已获取焦点(后续方向键操作从它开始),却未显示高亮效果。
我基于Empty activity模板创建项目,为提升可见性,在res/value/themes.xml中添加如下配置:
<!-- Customize your theme here. --> <item name="android:textSize">25sp</item> <item name="colorControlHighlight">@color/purple_700</item> </style> </resources>
为精简内容,我未使用布局文件,所有操作均在主Activity代码中完成:
@file:SuppressLint("SetTextI18n") package lv.trialto.myapplication import android.annotation.SuppressLint import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.ViewGroup import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.widget.Button import android.widget.LinearLayout import android.widget.TextView import android.widget.Toast import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val numbers = arrayOf("One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine") var nextNumberIndex = 0 val rootLinearLayout = LinearLayout(this).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT) orientation = LinearLayout.VERTICAL } val textViewList = mutableListOf<TextView>() for (y in 1..3) { val horizontalLinearLayout = LinearLayout(this).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT) orientation = LinearLayout.HORIZONTAL } rootLinearLayout.addView(horizontalLinearLayout) for (x in 1..3) { val cell = TextView(this).apply { width = (100 * context.resources.displayMetrics.density + 0.5).toInt() isFocusableInTouchMode = true text = numbers[nextNumberIndex++] } textViewList.add(cell) horizontalLinearLayout.addView(cell) } } rootLinearLayout.addView(Button(this).apply { layoutParams = ViewGroup.LayoutParams(MATCH_PARENT, WRAP_CONTENT) text = "Focus random cell" setOnClickListener { val randomTextView = textViewList[textViewList.indices.random()] val saveText = randomTextView.text randomTextView.text = "HERE!" val result = randomTextView.requestFocus() Toast.makeText(context, "result = $result", Toast.LENGTH_LONG).show() lifecycleScope.launch { delay(1000) randomTextView.text = saveText } } }) setContentView(rootLinearLayout) } }
疑问
- 我哪里操作有误?
- 这种焦点对应的高亮效果,正确的名称是什么?
内容的提问来源于stack exchange,提问作者Andrew Usachov
相关产品推荐
相关产品推荐

