Android TextView SetText()停止另一个TextView的选取框 - 解决方法?

问题描述:

我目前正在玩Android的Textview的选取框功能。但有一个问题 - 我有一个包含几个TextView的布局。其中之一显示音乐文件的标题,我想要应用选取框功能。 另一方面,我不断更新当前曲目时间(每秒)。Android TextView SetText()停止另一个TextView的选取框 - 解决方法?

问题是,每次显示轨道时间的TextView都会更新(setText()),另一个TextView的选取框停止。我想这是因为setTExt()将焦点移动到我应用文本的TextView。

有没有解决方案呢?

我用字幕的TextView定制类从这个tutorial

有没有一种可能(可能是自定义类以及)对于其他的TextView不“偷”重点是什么?

谢谢!

问候

你可以简单地requestFocus()方法;在新的音乐TextView更新后,回到您想要选取的TextView。如果您无法完成此任务,请发布一些我们可以提供帮助的代码。

TextView.requestFocus()

+0

再次。感谢你及时的答复。我想我没有解释自己是对的,对不起。因为我更新了TextView EVERY SECOND,所以选取框甚至没有开始,因为这个更新周期太快了。这就是为什么我问自己是否可以在没有获得焦点的情况下更新TextView,以便focas将保留在使用选取框的TextView中。 – Georg 2011-02-11 23:55:19

+0

怎么样罗曼建议,并设置你想要选框setviewable(true); ? – Blundell 2011-02-12 18:35:58

+0

我把上面的代码放在runnable中,它工作正常!非常感谢! – dd619 2013-10-29 06:25:48

选取框当一个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的高度设置为固定值,并且选取框开始工作。

见我的答案在这里:https://*.com/a/13841982/1823503

的理念是:

  • 宽度和高度修复程序
  • 到的setSelected
  • 重写你的TextView固定焦点问题

您可以简单地使用LinearLayou包裹选取框TextView t