Android TextView SetText()停止另一个TextView的选取框 - 解决方法?
我目前正在玩Android的Textview的选取框功能。但有一个问题 - 我有一个包含几个TextView的布局。其中之一显示音乐文件的标题,我想要应用选取框功能。 另一方面,我不断更新当前曲目时间(每秒)。Android TextView SetText()停止另一个TextView的选取框 - 解决方法?
问题是,每次显示轨道时间的TextView都会更新(setText()),另一个TextView的选取框停止。我想这是因为setTExt()将焦点移动到我应用文本的TextView。
有没有解决方案呢?
我用字幕的TextView定制类从这个tutorial
有没有一种可能(可能是自定义类以及)对于其他的TextView不“偷”重点是什么?
谢谢!
问候
你可以简单地requestFocus()方法;在新的音乐TextView更新后,回到您想要选取的TextView。如果您无法完成此任务,请发布一些我们可以提供帮助的代码。
选取框当一个TextView被的setEnabled(真)或接收焦点被启用。使用setEnabled(true)来确保其他TextViews在焦点移动时不会停止其选取框。
但有一个问题 - 我有一个包含几个TextView的布局。我发现这里的解决方案: http://androidbears.stellarpc.net/?p=185
您应该扩展的TextView类并覆盖多种方法
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
if(focused)
super.onFocusChanged(focused, direction, previouslyFocusedRect);
}
@Override
public void onWindowFocusChanged(boolean focused) {
if(focused)
super.onWindowFocusChanged(focused);
}
@Override
public boolean isFocused() {
return true;
}
在我的情况setEnabled(true)
没有hepled。既不需要关注,也不需要任何类型的关注,因为它没有成为焦点问题。我相信选取框也会在TextView经过onLayout()
时重新启动。
在我的情况下,TextView是在一个LinearLayout中,它有layout_height="wrap_content"
。显示轨迹时间的TextView低于带有字幕的TextView。现在,当我每秒钟更新较低的TextView时,我相信OS会从头开始计算它的高度,并根据TextView的高度(当然每次都是相同的)计算整个LinearLayout的高度。这就是为什么整个LinearLayout(和它的孩子)得到重新启动选取框的onLayout()
。
长话短说,我将容器LinearLayout的高度设置为固定值,并且选取框开始工作。
您可以简单地使用LinearLayou包裹选取框TextView t
再次。感谢你及时的答复。我想我没有解释自己是对的,对不起。因为我更新了TextView EVERY SECOND,所以选取框甚至没有开始,因为这个更新周期太快了。这就是为什么我问自己是否可以在没有获得焦点的情况下更新TextView,以便focas将保留在使用选取框的TextView中。 – Georg 2011-02-11 23:55:19
怎么样罗曼建议,并设置你想要选框setviewable(true); ? – Blundell 2011-02-12 18:35:58
我把上面的代码放在runnable中,它工作正常!非常感谢! – dd619 2013-10-29 06:25:48